Jak manipulować zmienną, której nazwa jest sprzeczna z poleceniami PDB?

99

Mój kod jest, na dobre i na złe, pełen zmiennych jednoliterowych (to kwestia fizyki, więc te litery są znaczące), a także NumPy, z którymi często wchodzę w interakcje.

Podczas korzystania z debugera Pythona, od czasu do czasu będę chciał patrzeć na wartości, powiedzmy n. Jednak kiedy trafiam n<enter>, jest to polecenie PDB dla (n)ext, które ma wyższy priorytet. print ndziała, patrząc na to, ale jak mogę to ustawić?

Nick T.
źródło
2
Trochę przesada, ale czy próbowałeś eval? eval('n = 3')? Może to pomoże :)
Paulo Bu

Odpowiedzi:

136

Użyj wykrzyknika !przed instrukcją, aby ją uruchomić:

python -m pdb test.py
> /home/user/test.py(1)<module>()
-> print('foo')
(Pdb) !n = 77
(Pdb) !n
77
(Pdb) n
foo
> /home/user/test.py(2)<module>()
-> print('bar')
(Pdb)

W docs powiedzieć:

! statement

Wykonaj (jednowierszową) instrukcję w kontekście bieżącej ramki stosu. Wykrzyknik można pominąć, chyba że pierwsze słowo instrukcji przypomina polecenie debugera. […]

Abraham
źródło
2
IMO byłoby bardziej przyjazne dla użytkownika, gdyby polecenia wymagały! lub jakiś taki przedrostek.
user76284
13

Możesz użyć średników, więc po prostu umieść przed nim coś innego:

ipdb> print n
2
ipdb> n
> 145 <some code here>
  146
  147

ipdb> 1; n=4
1
ipdb> print n
4
Corley Brigman
źródło
7
Funkcjonalne obejście, ale uważam, że „!” jest operatorem, który ma zajmować się tą sprawą.
dinozaur
2

To nie jest bezpośrednia odpowiedź na twoje pytanie, ale może ci pomóc: PuDB to oparty na konsoli interfejs graficzny dla PDB, który oddziela polecenia od manipulacji zmiennymi zgodnie z projektem.

Bartosz Marcinkowski
źródło
Wygląda ciekawie; Będę musiał spróbować, kiedy będę miał czas na naukę
Nick T
0

Eric IDE, Wing IDE i Spyder, aby wymienić tylko kilka, mają wizualne debugery, które są warte wypróbowania, ponieważ oddzielają wyświetlanie wartości od poleceń.

Steve Barnes
źródło
wizualne debugery są zwykle bardzo wolne w porównaniu do debugowania przez konsolę, które prawie nie zajmuje czasu, aby uruchomić debugera.
Ciekawy
1
@ Ciekawe Rozpoczynają się wolniej, ale często są bardziej użyteczne, zwłaszcza dla osób z ograniczonym doświadczeniem.
Steve Barnes
W pracy naukowej debugger Spyder jest przydatny. Nie sądzę debugowania 10x10 macierzy jest praktyczny na CLI
shaunakde