2011-11-24 83 views
4

有沒有辦法在程序運行時查看python中所有變量的列表而不設置斷點?打印太亂了,因爲我有很多不斷變化的變量。在Python中查看變量

感謝

+0

如果你需要在Python這個級別進行調試,那麼你的編寫Python代碼的方法可能會有根本性的錯誤... –

回答

4

也許inspect可以幫助你,但你必須過濾信息。

用法,如:

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

也許這是值得一提的是,你不能遍歷導致字典的for循環,因爲asignment一個變量會改變那本字典。你只需要遍歷鍵(至少這就是我發現的)。

例子:

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的(Python擴展Eclipse的),你可以輕鬆地看你的變量,但是你需要首先設置一個斷點,那麼只有踏進/在你的代碼運行。

1

抓住一個調試器:http://winpdb.org/然後你就可以看到它們並在那裏看到它們;但是,如果您只是在尋找一個函數來打印本地作用域中定義的所有變量,只需調用locals()即可。

+2

正如對衝浪者的一個提示:'winpdb',儘管名稱很少,但仍然是一個跨平臺的GPL許可軟件。 :) – mac

1

如果你的問題是指python作爲一種語言(而不是「python作爲應用程序和實用程序的生態系統」),AFAIK的答案是「否」(不是開箱即用的)。當然有許多IDE允許你使用調試來查看變量的值[例如參見Sumit答案]。

但是,如果在開發過程中想要對多個變量進行「實時監控」,則可以使用logging模塊,並定義your own Handler class以便將信息重定向到某處。如果將消息設置爲log.debug級別,則只需更改應用程序的最低日誌級別即可激活/取消激活此功能。

HTH!

+0

此外:根據格式,您的消息包括時間,當前功能和其他信息。您可以爲消息設置不同的「級別」,以便您可以將消息壓縮到特定級別以下。 – aitchnyu