引入了 (如PEP 3134中所述)。这允许在引发异常时引用现有异常作为“原因”:
try:
frobnicate()
except KeyError as exc:
raise ValueError("Bad grape") from exc
捕获到的异常(exc
KeyError)因此成为新异常ValueError的一部分(“原因”)。任何捕获新异常的代码都可以使用“原因”。
通过使用此功能,__cause__
可以设置属性。内置的异常处理程序还知道如何报告异常的“原因”和“上下文”以及回溯。
在 ,该用例似乎没有很好的答案(如Ian Bicking和Ned Batchelder所述)。笨蛋