重新检查Traceback中的值

时间:2011-03-03 14:39:02

标签: python exception evaluate

我正在尝试对追溯进行一些精心的重新检查并获得实际值 来自无法返回更多(更好?)信息的对象 追溯。

案例场景是我导入和执行的函数,如下所示:

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时,如果我尝试评估引发异常的行,我(当然)无法说出ab是什么({ {1}}立即被引发)因为我缺少代码的上下文。

请注意,我可以访问NameErrora,因为上面的代码已导入然后执行。由于b不在当前名称空间中,因此我的问题依赖于从foo上下文中获取正确的值。

能够说出fooa是什么的正确方法是什么,以便y可以安全地说出类似:“a是真而且是假的”?

1 个答案:

答案 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