对于python有没有办法从异常发生的上下文打印变量范围?

Soi*_*oid 11 python exception

有没有办法从异常发生的上下文中打印变量范围?

例如:

def f():
    a = 1
    b = 2
    1/0

try:
    f()
except:
    pass # here I want to print something like "{'a': 1, 'b': 2}"
Run Code Online (Sandbox Code Playgroud)

Syl*_*sne 15

您可以使用该函数sys.exc_info()来获取您在except子句中当前线程中发生的最后一个异常.这将是异常类型,异常实例和回溯的元组.回溯是框架的链接列表.这是解释器用于打印回溯的内容.它确实包含本地词典.

所以你可以这样做:

import sys

def f():
    a = 1
    b = 2
    1/0

try:
    f()
except:
    exc_type, exc_value, tb = sys.exc_info()
    if tb is not None:
        prev = tb
        curr = tb.tb_next
        while curr is not None:
            prev = curr
            curr = curr.tb_next
        print prev.tb_frame.f_locals
Run Code Online (Sandbox Code Playgroud)


ond*_*dra 7

你必须首先提取回溯,在你的例子中,这样的东西会打印它:

except:
    print sys.exc_traceback.tb_next.tb_frame.f_locals
Run Code Online (Sandbox Code Playgroud)

我不确定tb_next,我猜你必须经历完整的追溯,所以像这样(未经测试):

except:
    tb_last = sys.exc_traceback
    while tb_last.tb_next:
        tb_last = tb_last.tb_next
    print tb_last.tb_frame.f_locals
Run Code Online (Sandbox Code Playgroud)