回溯模塊非常適合捕獲和處理異常,但在下面的示例中,它似乎從最近的異常中捕獲不完整的堆棧。traceback.print_exc()顯示不完整的堆棧跟蹤
考慮兩個文件,一個說 「mymod.py」:
import sys, traceback
def func():
try:
otherfunc()
except:
raise
#traceback.print_exc()
def otherfunc():
raise Exception('fake')
而另外一個說: 「myfile.py」:
from mymod import *
func()
運行myfile.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_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()在重新提升時不包括myfile.py框架。我如何使print_exc()包含原始調用框架?
請注意,如果我在except塊中添加traceback.print_stack(),它確實包含myfile.py框架,因此信息似乎可用。