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