2013-07-18 96 views
1

我創建了以下情況:python - 回溯期間顯示變量

我有一個運行一些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

看看Python的日誌記錄教程(http://docs.python.org/2/howto/logging.html) - 你不會得到的自動列表*每*範圍變量,但您可以使用特定的消息記錄特定的變量。 – Colleen

回答

1

你也可以看看Python的內置函數。這可能適用於簡單的情況,但我不確定它會是多麼強大的解決方案。一般來說,從對象 - >變量名稱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} 
+0

我見過人們使用django的一些交互式調試工具欄,顯示未捕獲異常期間使用的變量,所以我覺得它是可能的;就是找不到它。 – Mikhail