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"
添加回答
举报