我有一段与此类似的代码:
import sys
def func1():
func2()
def func2():
raise Exception('test error')
def main():
err = None
try:
func1()
except:
err = sys.exc_info()[1]
pass
# some extra processing, involving checking err details (if err is not None)
# need to re-raise err so caller can do its own handling
if err:
raise err
if __name__ == '__main__':
main()
当 func2
引发异常时,我收到以下回溯:
Traceback (most recent call last):
File "err_test.py", line 25, in <module>
main()
File "err_test.py", line 22, in main
raise err
Exception: test error
从这里我看不到异常来自哪里。原始回溯丢失。
如何保留原始回溯并重新提出?我想看到类似这样的东西:
Traceback (most recent call last):
File "err_test.py", line 26, in <module>
main()
File "err_test.py", line 13, in main
func1()
File "err_test.py", line 4, in func1
func2()
File "err_test.py", line 7, in func2
raise Exception('test error')
Exception: test error
原文由 parxier 发布,翻译遵循 CC BY-SA 4.0 许可协议
空白
raise
引发最后一个异常。如果您使用
raise something
Python 无法知道something
是之前刚刚捕获的异常,还是具有新堆栈跟踪的新异常。这就是为什么存在保留堆栈跟踪的空白raise
的原因。参考这里