异常处理

在程序出现bug时一般不会将错误信息直接显示给用户,而是可以自定义显示内容或处理。

常见异常

AttributeError             # 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError # 输入/输出异常;基本上是无法打开文件
ImportError # 无法引入模块或包;基本上是路径问题或名称错误
IndentationError # 语法错误(的子类) ;代码没有正确对齐
IndexError # 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError # 试图访问字典里不存在的键
KeyboardInterrupt # Ctrl+C被按下
NameError # 使用一个还未被赋予对象的变量
SyntaxError # Python代码非法,代码不能编译
TypeError # 传入对象类型与要求的不符合
UnboundLocalError # 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError # 传入一个调用者不期望的值,即使值的类型是正确的

更多异常

ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError

更多异常

实例

IndexError

list = ["a", 'b',1]
try:
list[10]
except IndexError as e:
print('out of range')
# out of range

KeyError

# -*-coding:utf-8 -*-

dic = {'k1':'v1'}
try:
dic['k2']
except KeyError as e: print('no key: %s'%e)
# no key: 'k2'

ValueError

s1 = 'hello'
try:
int(s1)
except ValueError as e:
print('%s not int'%e)
# invalid literal for int() with base 10: 'hello' not int

捕获异常

异常类只能用来处理指定的异常情况,如果非指定异常则无法处理,捕获异常的方式:

  • try: ... except Error   as e:
  • try: ... except Error1 as e: ...  except Error2 as e: ... ...
  • try: ... except Exception as e: ...
  • try: ... except Error as e: else: ... finally: ...  若无异常捕获,主代码后执行else;无论是否有异常,finally都会在最后执行 
s1 = 'hello'
try:
int(s1) # 同时监测多个异常
except IndexError as e:
print('%s index out of range'%e)
except KeyError as e:
print('no key %s'% e)
except ValueError as e:
print("vlaue error: %s" %e) # 万能异常,如果存在异常,前面没有捕获到,则Exception处理
# 注:并不是所有的异常都能捕获的
except Exception as e:
print("error") # 如果没有异常,主代码执行完执行else后面的代码
else:
print("run ok") # 无论是否有异常,finally后面的代码都会在最后执行
finally:
print("run over")
#
# vlaue error: invalid literal for int() with base 10: 'hello'
# run over

Python修炼之路-异常的更多相关文章

  1. Python修炼之路-文件操作

    Python编程之文件操作 文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 每次文件打开.读取信息时,Python自动记录所达到的位置,好比一个书签,之后每一次 ...

  2. Python修炼之路-装饰器、生成器、迭代器

    装饰器 本质:是函数,用来装饰其他函数,也就是为其他函数添加附加功能. 使用情景 1.不能修改被装饰的函数的源代码:        2.不能修改被装饰的函数的调用方式. 在这两种条件下,为函数添加附加 ...

  3. python修炼之路——控制语句

    Python编程之print python2.x和python3.x的print函数区别:python3.x的print函数需要加括号(),python2.x可以不加. #-*- coding:utf ...

  4. Python修炼之路-数据类型

    Python编程之列表 列表是一个使用一对中括号"[   ]" 括起来的有序的集合,可以通过索引访问列表元素,也可以增加和删除元素. 列表的索引:第一个元素索引为0,最后一个元素索 ...

  5. Python修炼之路-函数

    Python编程之函数 程序的三种方式 面向对象:类------->class 面向过程:过程------>def 函数式编程:函数------>def 定义函数 函数:逻辑结构化与 ...

  6. Python修炼之路-模块

    模块 模块与包 模块:用来从逻辑上组织python代码(可以定义变量.函数.类.逻辑:实现一个功能),本质就是.py结尾的python文件. 例如,文件名:test.py,对应的模块名为:test 包 ...

  7. python修炼之路---面向对象

    面向对象编程 面向对象编程:使用类和对象实现一类功能. 类与对象 类:类就是一个模板,模板里可以包含多个函数,函数里实现一些功能. 对象:是根据模板创建的实例,通过实例对象可以执行类中的函数. 面向对 ...

  8. Python修炼之路-Socket

    网络编程 socket套接字 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过“套接字”向网络发出请求或者应答网络请求. socket ...

  9. Python菜鸟之路:Python基础-类(2)——成员、成员修饰符、异常及其他

    三大成员 在Python的面向对象中,主要包括三大成员:字段.方法.属性 字段 类成员的字段又可分为普通字段.静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,代码示例如下: ...

随机推荐

  1. ControlTemplate in WPF —— RadioButton

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  2. JavaScript日常学习5

    JavaScript字符串属性和方法 eg :var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";      var sln = txt.length; ...

  3. Elasticsearch 6.2.3版本 同一个index新增type报错 Rejecting mapping update to [website] as the final mapping would have more than 1 type: [blog2, blog]

    在website的index下已经存在一个名为blog的type.想在website下,新增一个名为blog2的type. 执行语句如下: PUT /website/blog2/1 { "t ...

  4. shadow配置文件及结果

  5. Golang的面向对象编程【结构体、方法、继承、接口】

    Golang也支持面向对象编程.但与以前学过传统的面向对象编程语言有区别.1)Golang没有类class,Go语言的结构体struct和类class有相似的特性.2)Golang中不存在继承,方法重 ...

  6. CentOS7中SSH免密登陆设置

    一.准备三台客户机 hadoop100 192.168.13.100(Master) hadoop101 192.168.13.101 hadoop102 192.168.13.102 二.在hado ...

  7. 【Java基础】Java创建对象的五种方式

    Java中创建(实例化)对象的五种方式 1.用new语句直接创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3. ...

  8. 微信小程序 解析html格式内容

    需要引入html-view文件 1/js 代码 const HtmlParser=require('../../utils/html-view/index') data: { coupon_text: ...

  9. 微信小程序--catchtap&bindtap

    转自:https://www.cnblogs.com/heron-yu/p/7244481.html 转自:http://blog.csdn.net/xiaochun365/article/detai ...

  10. win10 hhctrl.ocx 丢失

    1.我的是从同事电脑上复制过来的,他电脑也是win102.复制文件“hhctrl.ocx”到系统目录下  32位系统目录为:C:\WINNT\System32:64位系统为C:\Windows\Sys ...