4.3. 异常
异常是中断代码块的正常控制流程以便处理错误或其他异常条件的一种方式。 异常会在错误被检测到的位置 引发,它可以被当前包围代码块或是任何直接或间接发起调用发生错误的代码块的其他代码块所 处理。
Python 解析器会在检测到运行时错误(例如零作为被除数)的时候引发异常。 Python 程序也可以通过 raise
语句显式地引发异常。 异常处理是通过 try
… except
语句来指定的。 该语句的 finally
子句可被用来指定清理代码,它并不处理异常,而是无论之前的代码是否发生异常都会被执行。
Python 的错误处理采用的是“终止”模型:异常处理器可以找出发生了什么问题,并在外层继续执行,但它不能修复错误的根源并重试失败的操作(除非通过从顶层重新进入出错的代码片段)。
当一个异常完全未被处理时,解释器会终止程序的执行,或者返回交互模式的主循环。 无论是哪种情况,它都会打印栈回溯信息,除非是当异常为 SystemExit
的时候。
异常是通过类实例来标识的。 except
子句会依据实例的类来选择:它必须引用实例的类或是其所属的基类。 实例可通过处理器被接收,并可携带有关异常条件的附加信息。
注解
异常消息不是 Python API 的组成部分。 其内容可能在 Python 升级到新版本时不经警告地发生改变,不应该被需要在多版本解释器中运行的代码所依赖。
另请参看 try 语句 小节中对 try
语句的描述以及 raise 语句 小节中对 raise
语句的描述。
脚注
- 1
- 出现这样的限制是由于通过这些操作执行的代码在模块被编译的时候并不可用。