【问题标题】:python - show variables during tracebackpython - 在回溯期间显示变量
【发布时间】:2013-07-17 19:21:06
【问题描述】:

我创建了以下情况:

我有一个运行一些 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,我知道它有记录器,但我找不到任何关于如何启用变量打印的信息。我只发现了如何隐藏敏感变量,这不是问题,因为我根本看不到任何变量。

【问题讨论】:

标签: python django debugging


【解决方案1】:

作为最佳实践,您应该避免在输出或异常中包含重复错误信息,有一些工具可以帮助您。这是一个例子:

看看一些相关的包。对于简单的用法,您可以选择traceback-with-variables (pip install traceback-with-variables),这是明信片

或者试试tbvaccine,或者better-exceptions,或者any other package

【讨论】:

  • 感谢您使用新软件包回答老问题!还是有用的?
【解决方案2】:

您还可以查看 Python 的内置函数 locals()。这可能适用于简单的情况,尽管我不确定它的解决方案有多强大。一般来说,从对象 -> 变量名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}

【讨论】:

  • 我看到人们使用一些交互式的 django 调试工具栏来显示未捕获异常期间正在使用的变量,所以我觉得这是可能的;就是找不到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多