我正在尝试对追溯进行一些精心的重新检查并获得实际值 来自无法返回更多(更好?)信息的对象 追溯。
案例场景是我导入和执行的函数,如下所示:
def foo():
a = True
b = False
assert a == b
并执行如下:
from foo import foo
def re_inspect():
try:
foo()
except Exception, e:
# re-inspect traceback and check `a` and `b`
当引发AssertionError
时,如果我尝试评估引发异常的行,我(当然)无法说出a
或b
是什么({ {1}}立即被引发)因为我缺少代码的上下文。
请注意,我不可以访问NameError
或a
,因为上面的代码已导入然后执行。由于b
不在当前名称空间中,因此我的问题依赖于从foo
上下文中获取正确的值。
能够说出foo
和a
是什么的正确方法是什么,以便y可以安全地说出类似:“a是真而且是假的”?
答案 0 :(得分:5)
您可以使用检查模块:
try:
foo()
except AssertionError, e:
import inspect
previous_trace = inspect.trace()[1]
frame = previous_trace[0]
print 'value of a, b:', inspect.getargvalues(frame).locals
请参阅http://docs.python.org/library/inspect.html#inspect.getargvalues