异常处理
这里所指的异常并不是语法错误,语法错误在 Python 中被称为解析错误。解析错误一般会由 Python 解析器直接指出。异常则是在语法都正确的情况下,解析器在运行期检测到的错误。在没有进行异常处理时,Python 会终止脚本的执行并指出错误所在。
使用try...except
可以进行异常处理,这与其他语言中的try...catch
功能基本一致。其使用格式为:
try:
可能出错的语句块
except 错误类型:
处理语句块
如果没有异常发生,except
语句块的内容会被略过;如果发生了异常,则会执行except
语句块内容,发生错误之后的 try
语句块内容将被略过。一个 try
语句可以包含多个except
语句块,但同一时刻仅有一个except
语句块会被执行。如果需要在except
中处理多种错误,可以将其组合成元组放置于except
关键字后,例如:
try:
pass
except (RuntimeError, TypeError, NameError):
pass
通常习惯中,try
语句的最后一个 except
语句块不附加任何错误,直接接一个冒号,这表示这一条 except
语句块将捕获前面所有 except
语句块未捕获的异常。此外,try
语句还可以附加一个 else
语句块,这个 else
语句块必须放置在所有 except
语句块之后,它将会在 try
语句块未发生任何异常的时候执行。具体使用可见以下示例。
try:
pass
except IOError:
pass
except:
pass
else:
pass
Python 可以使用raise
语句抛出一个新的异常实例,例如:raise NameError('Hi')
。在 except
语句块中使用不带任何参数的raise
,可以将捕获到的异常再次抛出。对于异常的自定义,将在后面类的定义中介绍。
try
语句还可以附加 finally
语句块,用于在任何情况下语句块的执行,通常用来进行异常现场的清理。finally
语句块的用法与 else
语句块类似。