异常处理
常见的异常类
Exception | 描述 |
---|---|
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器 (generator) 发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除 (或取模) 零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达 EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
MemoryError | 内存溢出错误 (对于 Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用 (Weak reference) 试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
捕获异常
使用 try-except-finally
捕获异常
1 | try: |
- 若未发生异常,则将 try 中的代码执行完,执行之后的代码
- 若捕获到了异常,except 子句中有匹配的异常,则处理异常,处理后继续执行之后的语句
- 若异常发生,没有匹配的 except 子句,则异常被抛到上层 try 块中,直到程序最上层,结束程序
抛出异常
使用 raise 关键字手动抛出异常,常见有三种用法
raise
:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中继续抛出异常)或默认引发 RuntimeError 异常raise Exception
:raise 后带一个异常类名称,表示引发执行类型的异常raise Exception(message)
:在引发指定类型的异常的同时,附带异常的描述信息
自定义异常
自定义异常类需要重写构造函数
1 | class Networkerror(Exception): |