Ich habe ein Python-Modul mit einer Funktion:
def do_stuff(param1 = 'a'):
if type(param1) == int:
# enter python interpreter here
do_something()
else:
do_something_else()
Gibt es eine Möglichkeit, in den Befehlszeileninterpreter zu gelangen, in dem ich den Kommentar habe? so dass, wenn ich folgendes in Python ausführen:
>>> import my_module
>>> do_stuff(1)
Ich erhalte meine nächste Eingabeaufforderung in dem Umfang und Kontext, in dem ich den Kommentar habe do_stuff()
.
Antworten:
Einfügen
wird an diesem Punkt den Python-Debugger aufrufen
Siehe hier: http://docs.python.org/library/pdb.html
quelle
pdb
ist großartige Vanillepython; Wenn Sie Platz für das Einbringen eines externen Pakets haben,ipdb
ist dies großartig - dieselbe Funktionalität wie der Debugger, jedoch mit der Hervorhebung der Syntax, der Tab-Vervollständigung usw. von ipythonipdb
war veraltet, heutzutage benutze ichpdbpp
(pdb++
) , das ähnliche Funktionen hat und mitimport pdb; pdb.set_trace()
(dh es Patches, die importieren, so ist es ein Drop-In-Ersatz)ipdb
war veraltet? Ich kann keine Neuigkeiten davon finden.ipdb
vorher, aber habe es genossen ,pdbpp
daWenn Sie eine standardmäßige interaktive Eingabeaufforderung wünschen (anstelle des Debuggers, wie durch Prestomation angezeigt), können Sie Folgendes tun:
Siehe: das Codemodul .
Wenn Sie IPython installiert haben und stattdessen eine IPython-Shell möchten, können Sie dies für IPython> = 0.11 tun:
oder für ältere Versionen:
quelle
code.interact()
a la PDB fortzufahrenc(ontinue)
?code.interact()
ist ein blockierender Anruf. Ihr Programm stoppt und wartet, bis es beendet ist. Wenn Sie den interaktiven Interpreter verlassen, sollte Ihr Programm mit der unmittelbar folgenden Anweisung fortgesetzt werden.help
Wenn Sie einen Standard-Python-Interpreter möchten, können Sie dies tun
Dies ermöglicht den Zugang sowohl zu Einheimischen als auch zu Einheimischen.
Wenn Sie in einen IPython-Interpreter wechseln möchten, ist die
IPShellEmbed
Lösung veraltet . Derzeit funktioniert Folgendes:quelle
code.interact(local=dict(globals(), **locals()))
ist so viel besser alscode.interact(local=locals())
weil letzteres dich dazu bringt, Pakete wieder zu importieren