在Python 2中,您需要使用所有三个参数来引发:
raise failingThread.exc_info[0], failingThread.exc_info[1], failingThread.exc_info[2]
传递回溯对象作为第三个参数来保留堆栈。
来自help('raise')
:
如果存在而不是第三个对象None
,则它必须是一个回溯对象(请参阅 “标准类型层次结构” 一节),并且将其替换为发生异常的位置,而不是当前位置。如果存在第三个对象而不是回溯对象或None
,TypeError
则会引发异常。三表达式形式的raise
有助于在except子句中透明地重新引发异常,但是raise
如果要重新引发的异常是当前作用域中最近活动的异常,则不希望使用任何表达式。
在这种特殊情况下,您不能使用no表达式版本。
对于Python 3(根据注释):
raise failingThread.exc_info[1].with_traceback(failingThread.exc_info[2])
或者您可以简单地使用raise ... from ...
链接异常,但是会引发一个链接的异常,并在 属性中附加了原始上下文,并且可能不是您想要的。