Ich führe also ein Python-Skript aus, in dem ich Pythons Debugger PDB aufrufe, indem ich Folgendes schreibe:
import ipdb; ipdb.set_trace()
(iPythons Version von PDB, obwohl ich nicht denke, dass es einen Unterschied macht; ich verwende sie nur für die farbige Ausgabe).
Wenn ich jetzt zum Debugger komme, möchte ich eine mehrzeilige Anweisung wie eine if-Klausel oder eine for-Schleife ausführen, aber sobald ich tippe
if condition:
und drücken Sie die Eingabetaste, ich erhalte die Fehlermeldung *** SyntaxError: invalid syntax (<stdin>, line 1)
Wie kann man mehrzeilige Anweisungen innerhalb von PDB ausführen? Wenn dies nicht möglich ist, gibt es eine Möglichkeit, eine if-Klausel oder eine for-Schleife weiterhin auszuführen?
interact
Befehl pdb erreicht werden kann ( wie ich aus dieser Bug-Tracker-Nachricht gelernt habe ).!
in derimport
Erklärung benötigt ?!
, um Unfälle zu vermeiden. ZBc = 42
in pdb würde die Ausführung fortgesetzt, anstatt der Variablen zuzuweisenc
.interact
zu sein, aber es spielt für mich mit Spyder nicht gut.In Python3
ipdb
(undpdb
) haben Sie einen Befehl namens Interact . Es kann verwendet werden, um:Um es zu verwenden, geben Sie einfach
interact
an der pdb-Eingabeaufforderung ein. Dies ist unter anderem nützlich, um Code über mehrere Zeilen anzuwenden und um ein versehentliches Auslösen anderer pdb-Befehle zu vermeiden.quelle
interact
ist ein zu starker Vorschlag. 90% das ist alles was ich jemals brauche und es ist viel einfacher zu tippen alsfrom IPython import embed; embed()
Meine Empfehlung ist die Verwendung der IPython-Einbettung.
quelle
import embed; embed(user_ns=locals())
.Im Python (2.7.1) -Interpreter oder -Debugger (Import pdb) können Sie eine mehrzeilige Anweisung mit der folgenden Syntax ausführen.
Hinweis: Wenn ich mich im Interpreter befinde, muss ich zweimal die Eingabetaste drücken, bevor der Code ausgeführt wird. Im Debugger muss ich jedoch nur einmal die Eingabetaste drücken.
quelle
Es gibt den Sonderfall, wenn beim Erreichen eines Haltepunkts mehrere Befehle ausgeführt werden sollen. Dann gibt es den Debugger-Befehl
commands
. Sie können mehrere Befehlszeilen eingeben und dann die gesamte Sequenz mit demend
Schlüsselwort beenden . Mehr mit(pdb) help commands
.quelle
Ich weiß nicht, ob Sie dies tun können, aber das wäre eine großartige Funktion für ipdb. Sie können natürlich Listenverständnisse verwenden und einfache mehrzeilige Ausdrücke ausführen wie:
Sie können auch einige Funktionen im Voraus schreiben, um das zu tun, was Sie normalerweise tun müssen und normalerweise mehrere Zeilen benötigen.
quelle
Schreiben Sie Ihren Code in einen Texteditor und fügen Sie ihn in den Debugger ein:
Es ist eine dumme Lösung, aber auch schnell und schmutzig. Es funktioniert auf dem Linux-Terminal, aber ich bin nicht sicher, ob es auf der Windows-Konsole funktioniert.
quelle
*** SyntaxError: unexpected EOF while parsing