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
posted @ 2019-05-07 10:30  PIPO2  阅读(331)  评论(0编辑  收藏  举报