4

我正在尝试对回溯进行一些精心的重新检查,并从未能与回溯一起返回更多(更好?)信息的对象中获取实际值。

案例场景在我导入并执行的函数中,如下所示:

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或是bNameError立即引发),因为我缺乏代码的上下文。

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

什么是能够分辨什么ab是什么的正确方法,以便您可以安全地说:“a is True and be is False”?

4

1 回答 1

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

于 2011-03-03T14:56:19.547 回答