异常处理机制
1、异常是什么
Python使用异常对象来表示异常状态,并在遇到错误时引发异常。
异常对象未被处理(或捕获)时,程序将终止并显示一条错误消息(traceback)。
每个异常都是某个类的实例,如ZeroDivisionError。
2、让事情沿指定的轨道出错
2.1 raise语句
要引发异常,可使用raise语句,并将一个类(必须是Exception的子类)或实例作为参数。
将类作为参数时,将自动创建一个实例。
类名 | 描述 |
Exception | 几乎所有的异常类都是从它派生出来的 |
AttributeError | 引用属性或给它赋值失败时引发 |
OSError | 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类 |
IndexError | 使用序列中不存在的索引时引发,为LookupError的子类 |
KeyError | 使用映射中不存在的键时引发,为LookupError的子类 |
NameError | 找不到名称(变量)时引发 |
SyntaxError | 代码不正确时引发 |
TypeError | 将内置操作或函数用于类型不正确的对象时引发 |
Valuerror | 将内置操作或函数用于这样的对象时引发:其类型正确但包含的值不合适 |
ZeroDIvisionError | 在除法或求模运算的第二个参数为零时引发 |
2.2 自定义的异常类
就像创建其他类一样,直接或间接地继承Exception(从任何内置异常类派生都可以)
3、捕获异常
捕获异常可使用try/except
3.1 不提供参数
还可使用raise......from......语句来提供自己的异常上下文,也可使用None来禁用上下文。
3.2 多个except子句
可使用一个except子句捕获多种异常,在一个元组中指定这些异常
3.3 finally子句
finally子句,可用于在发生异常时执行清理工作。
finally子句适合用于确保文件或网络套接字得以关闭。
4、异常和函数
如果不处理函数中引发的异常,它将向上传播到调用函数的地方,如果在那里也未得到处理,异常将继续传播,直至到达主程序(全局作用域),如果主程序中也没有异常处理程序,程序将终止并显示栈跟踪消息。
5、警告
警告类似于异常,但通常只打印一条错误消息,可指定警告类别,它们是Warning的子类