Python 3 中是否有标准的异常链处理方式?


在处理一个异常“A”的过程中,可能会发生另一个异常“B”。在 Python 2.0 版本中,如果发生这种情况,异常 B 会向外传播,而异常 A 会丢失。为了调试问题,了解这两个异常都很有用。

有时,异常处理程序需要故意重新引发异常,无论是为了提供额外信息还是将异常转换为另一种类型。`__cause__` 属性提供了一种显式记录异常直接原因的方法。

异常链仅在 Python 3 中可用。Python 3 使用 `raise ... from` 语句来链式处理异常。我们使用 `raise..from` 语句改写了给定的代码,如下所示。

try:
s = {‘a’:1, ‘b’:2}['c']
except KeyError as e:
raise ValueError('failed') from e

Python 3 默认会显示异常处理期间发生的所有异常,如下所示。

Traceback (most recent call last):
File "source_file.py", line 2, in <module>
s = {'a':1, ‘b’:2}['c']
KeyError: 'c'

上述异常是以下异常的直接原因。

Traceback (most recent call last):
File "source_file.py", line 4, in <module>
raise ValueError('failed') from e
ValueError: failed

更新于:2019年9月27日

232 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告