在 Python 3 中是否有使用异常链的标准方法?

pythonserver side programmingprogramming更新于 2025/12/26 18:20:17

在处理一个异常"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

相关文章


有用资源