我创造了以下情况:
我有一个运行一些python代码的cronjob,它崩溃了。请考虑以下代码:
import json
uno = 1
print json.loads(uno)
我收到以下追溯:
Traceback (most recent call last):
File "thiswillbreak.py", line 4, in <module>
print json.loads(uno)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
我是否还要收到范围内所有变量的列表,以便我可以动态调试,而不是尝试重现场景?显然硬编码值很容易,但如果从其他地方获得这个值 - 调试变得更难。
特别是我也使用Django,我知道它有记录器,但我找不到任何关于如何启用变量打印的信息。我只发现了如何隐藏敏感变量,这不是问题,因为我根本看不到任何变量。
答案 0 :(得分:1)
您还可以查看Python的内置函数locals()
。这可能适用于简单的情况,虽然我不确定它将是多么强大的解决方案。一般来说,从对象 - &gt;变量名isn't possible in python。
import json
dos = 2
def foo():
uno = 1
tres = 3
try:
json.loads(uno)
except:
print locals()
foo()
>>> {'uno': 1, 'tres': 3}
答案 1 :(得分:1)
作为最佳实践,您应该避免在输出或异常中出现dubug信息,有一些工具可以帮助您。这是一个示例:
看看一些相关的软件包。为了简单使用,您可以选择traceback-with-variables(pip install traceback-with-variables
),这是明信片