重新检查Traceback中的值

alf*_*eza 4 python exception evaluate

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

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

def foo():
    a = True
    b = False
    assert a == b
Run Code Online (Sandbox Code Playgroud)

并执行如下:

from foo import foo

def re_inspect():
    try:
        foo()
    except Exception, e:
         # re-inspect traceback and check `a` and `b`
Run Code Online (Sandbox Code Playgroud)

AssertionError引发提升时,如果我尝试评估引发异常的行,我(当然)无法分辨出什么a或是b(NameError立即引发)因为我缺少代码的上下文.

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

什么是正确的方法,能够告诉什么a,b以便y可以安全地说出类似:"一个是真的,是假的"?

tit*_*ito 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
Run Code Online (Sandbox Code Playgroud)

请参阅http://docs.python.org/library/inspect.html#inspect.getargvalues