Python 错误和异常
语法错误
Python 解释器会输出出现语法错误的那一行,并显示一个箭头,指向行里检测到的第一个错误。
>>> while True print('Hello')
File "<stdin>", line 1
while True print('Hello')
^
SyntaxError: invalid syntax
异常
即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。
异常以不同的类型出现,这些类型都作为信息的一部分打印出来。错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。
异常处理
通常,异常不会被程序自动处理。Python 处理异常会用到 try-except 语句。
try:
<语句块1>
except <异常类型>:
<语句块2>
else:
<语句块3>
finally:
<语句块4>
处理过程如下:
-
首先执行 try 子句的语句块。
-
如果没有产生异常,则跳过 except 子句,执行 else 子句。
-
如果产生了异常,则跳过 try 子句中剩余部分和 else 子句。如果异常类型和 except 关键字后面的异常类型匹配(同一个类或者是它的基类),则执行 except 子句的语句块。
-
不管是否有异常发生,finally 子句都会被执行。
-
try 子句产生的未被 except 捕获的异常,在 finally 子句执行完成后,异常会被重新抛出。
抛出异常
Python 使用 raise 语句抛出一个指定的异常。
>>> raise NameError('Here')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: Here
raise 唯一的参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(Exception 子类)。
如果你需要明确一个异常是否抛出,但不想处理它,raise 语句可以再次抛出该异常。
>>> try:
... raise NameError('Here')
... except NameError:
... print('An exception flew by!')
... raise
...
An exception flew by!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
NameError: Here