您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

在Python 2中,您需要使用所有三个参数来引发:

raise failingThread.exc_info[0], failingThread.exc_info[1], failingThread.exc_info[2]

传递回溯对象作为第三个参数来保留堆栈。

来自help('raise')

如果存在而不是第三个对象None,则它必须是一个回溯对象(请参阅 “标准类型层次结构” 一节),并且将其替换为发生异常的位置,而不是当前位置。如果存在第三个对象而不是回溯对象或NoneTypeError则会引发异常。三表达式形式的raise有助于在except子句中透明地重新引发异常,但是raise如果要重新引发的异常是当前作用域中最近活动的异常,则不希望使用任何表达式。

在这种特殊情况下,您不能使用no表达式版本。

对于Python 3(根据注释):

raise failingThread.exc_info[1].with_traceback(failingThread.exc_info[2])

或者您可以简单地使用raise ... from ...链接异常,但是会引发一个链接的异常,并在 属性中附加了原始上下文,并且可能不是您想要的。

python 2022/1/1 18:35:24 有218人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶