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?


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. [...]


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

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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.