回溯模块对于捕获和处理异常非常有用,但是在下面的示例中,它似乎从最近的异常捕获了一个不完整的堆栈。在
考虑两个文件,一个说“mymod.py公司“:
import sys, traceback
def func():
try:
otherfunc()
except:
raise
#traceback.print_exc()
def otherfunc():
raise Exception( 'fake' )
另一个说我的文件.py“:
^{pr2}$跑步我的文件.py给出:
Traceback (most recent call last):
File "myfile.py", line 2, in <module>
func()
File "/Users/rrdrake/temp/mymod.py", line 5, in func
otherfunc()
File "/Users/rrdrake/temp/mymod.py", line 11, in otherfunc
raise Exception( 'fake' )
现在就换mymod.py公司注释掉“raise”并取消对print\u exc行的注释。然后我们得到
Traceback (most recent call last):
File "/Users/rrdrake/temp/mymod.py", line 5, in func
otherfunc()
File "/Users/rrdrake/temp/mymod.py", line 11, in otherfunc
raise Exception( 'fake' )
Exception: fake
请注意print_exc()不包括文件.mypy重新升高时的框架。如何使print_exc()包含源调用帧?在
请注意,如果我添加traceback.print_堆栈()在except块中,它确实包含我的文件.py帧,所以信息似乎是可用的。在
在第一种情况下,
raise
调用的异常会在脚本的顶层出现。Python调用sys.excepthook()
,这将显示完整的回溯。在在第二种情况下,捕捉异常并使用
print_exc()
打印异常,这将在调用函数(在您的示例中为otherfunc()
)处停止,因此您不会得到完整的回溯。在您可以使用自己的回溯/异常打印功能来更改它, 沿着这些思路:
只需将
traceback.print_exc()
替换为print_full_stack()
。此函数涉及inspect
模块来获取代码帧。在您可以阅读此博客了解更多信息:http://blog.dscpl.com.au/2015/03/generating-full-stack-traces-for.html
注意,上面文章中的代码有一些缩进错误。。。在
相关问题 更多 >
编程相关推荐