重新引发Python异常并保留堆栈跟踪

重新引发Python异常并保留堆栈跟踪,第1张

重新引发Python异常并保留堆栈跟踪

在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 ...
链接异常,但是会引发一个链接的异常,并在 cause
属性中附加了原始上下文,并且可能不是您想要的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5661668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存