2010-11-15 27 views
7

我是ipython的新手,我嘗試使用ipython來調試我的代碼。我所做的:使用ipython和%pdb在調試會話中訪問變量

[1]: %pdb 
Automatic pdb calling has been turned ON 

然後

In [2]: %run mycode.py 

,並在代碼中,我有1/0所以它拋出一個異常,並會自動進入調試會話。

ZeroDivisionError: float division 

ipdb> variable 
array([ 0.00704313, -1.34700666, -2.81474391]) 

所以我可以訪問變量。但是,當我做到以下幾點:

ipdb> b = variable 
*** The specified object '= variable' is not a function or was not found along sys.path. 

但這個工程:

ipdb> b = self.X 

回答

9

b用於設置斷點。所以無論如何b預計是一個函數或行號。

如果您輸入ipdb> help,您將看到完整的命令列表(保留字)。

你可以使用,比如說,xy作爲變量:

ipdb> y = variable 

ipdb> exec 'b = variable' 
+0

有什麼辦法重載這個B命令?在我的應用程序中,變量名b很自然地發生,並且它是一種無法使用它的痛苦。 – joon 2010-11-15 20:11:43

+0

@joon:擁有一個字母的變量名通常不是一個好的編程習慣。也許這是問題應該激勵你改變變量名稱。我意識到這可能很難做到。在這種情況下,你可以嘗試'exec'b = variable''。 – unutbu 2010-11-15 20:39:18

+2

當然。這只是字符b是數學對應物的自然選擇。謝謝! – joon 2010-11-16 21:38:30

0

可以使用

locals()["b"] = variable 
1

我認爲你需要使用「! 「 (pdb documentation): !語句 在當前堆棧幀的上下文中執行(單行)語句。除非該語句的第一個單詞類似於調試器命令,否則可省略感嘆號。要設置一個全局變量,你可以使用前綴在同一行的全局聲明分配命令,例如:

global list_options; list_options = ['-l']