异常处理

这里所指的异常并不是语法错误,语法错误在 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 语句块类似。