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
广告