Wie manipuliere ich eine Variable, deren Name mit PDB-Befehlen in Konflikt steht?

92

Mein Code ist, egal ob gut oder schlecht, voller Einzelbuchstabenvariablen (es ist Physikmaterial, also sind diese Buchstaben bedeutungsvoll) sowie NumPys, mit denen ich oft interagiere.

Wenn ich den Python-Debugger verwende, möchte ich gelegentlich den Wert von z n. Wenn ich jedoch drücke n<enter>, ist dies der PDB-Befehl für (n)ext, der eine höhere Priorität hat. print narbeitet daran, es anzusehen, aber wie kann ich es einstellen?

Nick T.
quelle
2
Ein bisschen übertrieben, aber hast du es versucht eval? eval('n = 3')? Vielleicht hilft es :)
Paulo Bu

Antworten:

128

Verwenden Sie ein Ausrufezeichen !vor einer Anweisung, damit sie ausgeführt wird:

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)

Die Dokumente sagen:

! statement

Führen Sie die (einzeilige) Anweisung im Kontext des aktuellen Stapelrahmens aus. Das Ausrufezeichen kann weggelassen werden, es sei denn, das erste Wort der Anweisung ähnelt einem Debugger-Befehl. [...]

Abraham
quelle
1
IMO wäre es benutzerfreundlicher gewesen , wenn Befehle erforderlich wären ! oder ein solches Präfix.
user76284
13

Sie können Semikolons verwenden, stellen Sie also einfach etwas anderes davor:

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

ipdb> 1; n=4
1
ipdb> print n
4
Corley Brigman
quelle
7
Eine funktionale Problemumgehung, aber ich glaube '!' ist der Betreiber, der diesen Fall behandeln soll.
Dinosaurier
2

Das ist nicht die direkte Antwort auf Ihre Frage, aber es kann Ihnen helfen: PuDB ist eine konsolenbasierte visuelle Schnittstelle für PDB, die Befehle von der Manipulation von Variablen durch Design trennt.

Bartosz Marcinkowski
quelle
Sieht interessant aus; Ich muss es versuchen, wenn ich Zeit zum Lernen habe
Nick T
-1

Eric IDE, Wing IDE & Spyder, um nur einige zu nennen, haben alle visuelle Debugger, die einen Versuch wert sind, da sie die Anzeige von Werten von den Befehlen trennen.

Steve Barnes
quelle
Visuelle Debugger sind normalerweise sehr langsam im Vergleich zum Debuggen über die Konsole, was fast keine Zeit zum Starten des Debuggers benötigt.
Neugierig
1
@Curious Sie sind langsamer zu starten, aber oft besser verwendbar, insbesondere für Personen mit begrenzter Erfahrung.
Steve Barnes
Für wissenschaftliche Arbeiten finde ich Spyders Debugger praktisch. Ich denke nicht, dass das Debuggen einer 10x10-Matrix auf der CLI praktisch ist
shaunakde