2010-11-15 13 views
7

Jestem nowy w ipython i próbuję użyć ipython do debugowania mojego kodu. Zrobiłem:dostęp do zmiennych w sesji debugowania z ipython i% pdb na

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

a następnie

In [2]: %run mycode.py 

iw kodzie mam 1/0 więc podnosi wyjątek i automatycznie przechodzi w sesji debugowania.

ZeroDivisionError: float division 

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

Dzięki temu mogę uzyskać dostęp do zmiennych. Ale kiedy wykonać następujące czynności:

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

ale to działa:

ipdb> b = self.X 

Odpowiedz

9

b służy do ustawiania punktów przerwę. Więc cokolwiek podąża za b ma być funkcją lub numerem linii.

Po wpisaniu ipdb> help zobaczysz pełną listę poleceń (słowa zastrzeżone).

Można użyć, powiedzmy, x lub y jako zmienna:

ipdb> y = variable 

lub

ipdb> exec 'b = variable' 
+0

Czy istnieje sposób na przeciążenie tego polecenia? W mojej aplikacji nazwa zmiennej b występuje dużo naturalnie, a ból nie jest w stanie jej użyć. – joon

+0

@joon: Posiadanie jednoliterowych nazw zmiennych ogólnie nie jest dobrą praktyką programowania. Może ten problem powinien zmotywować cię do zmiany nazwy zmiennej. Zdaję sobie sprawę, że może to być trudne. W takim przypadku możesz wypróbować 'exec 'b = variable''. – unutbu

+2

Oczywiście. To tylko postać b jest naturalnym wyborem dla matematycznego odpowiednika. Dziękuję Ci! – joon

0

można użyć

locals()["b"] = variable 
1

Myślę, że trzeba użyć „! " (pdb documentation): ! instrukcja Wykonaj instrukcję (jedna linia) w kontekście bieżącej ramki stosu. Wykrzyknik można pominąć: , chyba że pierwsze słowo instrukcji przypomina polecenie debuggera:. Aby ustawić globalną zmienną, można przedrostkiem polecenia przypisania instrukcji globalnej w tej samej linii, np .:

global list_options; list_options = ['-l'] 
Powiązane problemy