【问题标题】:How to pprint and automatically include the the variable name [duplicate]如何打印并自动包含变量名[重复]
【发布时间】:2014-10-08 11:13:53
【问题描述】:

对于 Python 2.7,我有一个用于调试的小工具:

def printvar(label, var):
    print "%s:\n%s" % (label, pformat(var))

我经常把它称为 printvar("foo", foo)。

是否可以简化一点,只传递变量,如 printvar(foo),但仍然打印变量的名称?使用内省什么的?

【问题讨论】:

标签: python


【解决方案1】:

你不能这样做,但你可以近似相反:只传入标签,让它获取实际值。这是一个快速版本:

def printvar(label):
    for frame in inspect.getouterframes(inspect.currentframe())[1:]:
        local_vars = frame[0].f_locals
        if label in local_vars:
            print "%s:\n%s" % (label, frame[0].f_locals[label])
            return
    raise NameError("No such variable")

那么你可以这样做:

def foo():
    x = 2
    printvar('x')

>>> foo()
x:
2

当然,这是一件非常棘手的事情:代码会查看其调用链中每个堆栈帧的局部变量命名空间。通常这种诡计是要避免的,但出于调试目的,它可能在紧要关头很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2018-12-23
    • 1970-01-01
    • 2023-01-22
    • 2015-08-17
    相关资源
    最近更新 更多