我有一段类似的代码:
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
有可能modify and rethrow出现异常:
因此,如果要修改异常并重新引发它,可以执行以下操作:
空白
raise
引发最后一个异常。如果使用
raise something
,Python无法知道something
是之前捕获的异常,还是具有新堆栈跟踪的新异常。这就是为什么保留栈跟踪的空白^ {< CD1> }。Reference here
您可以通过
sys.exc_info()
和traceback模块获得关于异常的许多信息请尝试对代码进行以下扩展。
这会打印出来,和你想要的一样。
相关问题 更多 >
编程相关推荐