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 次浏览

开启你的职业生涯

通过完成课程获得认证

开始
广告