1 回答

TA貢獻1802條經驗 獲得超5個贊
從格式化的追溯記錄中還不清楚Python可以打印出什么,但是由于您正在使用__import__,所以實際上得到了兩個單獨的traceback對象。您可以像這樣訪問第二個...
import sys
from pprint import pprint
try:
__import__(sys.argv[1])
except Exception as e:
my_traceback = sys.exc_info()[2]
# Print locals for my stack frame
#pprint(my_traceback.tb_frame.f_locals)
# Print locals for other stack frame
other_traceback = my_traceback.tb_next
pprint(other_traceback.tb_frame.f_locals)
Python文檔的3.2節中有關于traceback和frame對象的更多信息。
更新
那是與
inspect.getargvalues(callee_named_tuple[0])
上面相同的對象,因此當我深入研究時,我不知道那實際上是被呼叫者的本地人。
你是對的。我對inspect
模塊不是很熟悉-我傾向于traceback
直接訪問屬性。
我期望我可以找到命名空間dict,其中
i
變量的值為6,然后發生異常,而這種方式我可以得到i=None
。沒有辦法獲取被調用者的名稱空間嗎?
我也注意到了。使用似乎有些奇怪__import__
,因為使用時它可以正常工作execfile()
。以下腳本...
import sys
try:
execfile(sys.argv[1])
except Exception as e:
the_value_of_i = sys.exc_info()[2].tb_next.tb_frame.f_locals['i']
print 'The value of "i" was "%r"' % the_value_of_i
產量
The value of "i" was "6"
添加回答
舉報