在Python中查看变量

6
有没有一种方法可以在Python程序运行时查看所有变量的列表,而不需要设置断点?打印输出太乱了,因为我有很多经常变化的变量。谢谢。

如果你需要在Python中进行这个级别的调试,那么你编写Python代码的方法可能存在根本性的问题... - Karl Knechtel
4个回答

5

也许inspect可以帮助你,但你需要筛选信息。

用法如下:

> import inspect
> a = 5
> f = inspect.currentframe()
> print f.f_locals
...
...
'a': 5
...

也许值得一提的是,您不能在for循环中迭代结果字典,因为变量赋值将更改该字典。您只能迭代键(至少这就是我刚刚发现的)。

例如:

for v in f.f_locals.keys():
    if not v.startswith("_"):
        print v

看第一行:仅仅写for v in f.f_locals是不会成功的。

2
严格来说,您不必只迭代键。关键是keys()将迭代字典以构建列表,在分配给“v”之前已完成。这意味着如果您确实想按字典迭代它,仅使用dict(f.f_locals.keys())就可以,或者如果您想用它分配名称并执行其他操作,则可以将其保存在变量中。您也可以使用f.f_locals.items() ,但不能使用 f.f_locals.iteritems()f.f_locals.iterkeys() - Ben

2

如果你正在使用Pydev(Eclipse的Python扩展程序),你可以轻松地查看你的变量,但是你需要先设置一个断点,然后才能逐步执行你的代码。


1
获取一个调试器:http://winpdb.org/,然后您可以观察并查看它们;但是,如果您只是想要一个打印本地作用域中定义的所有变量的函数,只需调用locals()

2
只是提醒一下各位程序员:winpdb虽然名字起得不太好,但它是一个跨平台的GPL许可的软件。 :) - mac

1
如果你的问题是关于Python语言(而不是“Python作为应用程序和实用工具生态系统”),据我所知,答案是否定的(至少不能直接使用)。当然,有许多IDE允许您使用调试来查看变量的值[例如,请参见Sumit的回答]。
但是,如果在开发过程中您想要一个“实时监视器”来监视多个变量,您可以使用logging模块,并定义自己的处理程序类以便将信息“实时”重定向到某个地方。将消息设置为log.debug级别将使得通过简单更改应用程序的最小日志级别轻松激活/停用此功能。
希望对你有所帮助!

附加说明:根据格式,您的消息包括时间、当前函数和其他信息。您可以为您的消息设置不同的“级别”,以便您可以抑制低于某个级别的消息。 - Jesvin Jose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接