Wie kann ich in Python den aktuellen Aufrufstapel aus einer Methode heraus drucken (zu Debugging-Zwecken)?
python
debugging
stack-trace
man selbst
quelle
quelle
sys._current_frames()
. Zumdump_all_thread_tracebacks
Beispiel macht py_better_exchook das (Haftungsausschluss: Das habe ich geschrieben).quelle
traceback.print_exc()
, was Ihnen fast das gleiche gibt, was Sie ohne dieexcept
Aussage bekommen hätten (und auch weniger codiert als die akzeptierte Antwort).traceback.print_exc()
druckt die Stapelverfolgung für jede Ausnahme, die Sie möglicherweise behandeln - dies löst jedoch nicht die ursprüngliche Frage, wie der aktuelle Stapel gedruckt werden soll ("wo Sie sich jetzt befinden" im Gegensatz zu "wo sich Ihr Code befand, als die letzte Ausnahme aufgetreten ist" aus, wenn überhaupt ".)inspect.stack()
Gibt den aktuellen Stapel anstelle des Ausnahme-Tracebacks zurück:Unter https://gist.github.com/FredLoney/5454553 finden Sie eine Dienstprogrammfunktion für log_stack.
quelle
Wenn Sie den Python-Debugger verwenden, können Sie nicht nur Variablen interaktiv prüfen, sondern den Aufrufstapel auch mit dem Befehl "where" oder "w" abrufen.
Also ganz oben in Ihrem Programm
Dann im Code, wo Sie sehen möchten, was passiert
und Sie werden in eine Eingabeaufforderung fallen gelassen
quelle
where
?(pdb)
einfach einwhere
und der Stack-Trace wird auf dem Terminal gedruckt.breakpoint()
die den Import von pdb überflüssig macht.Für diejenigen, die den Aufrufstapel drucken müssen, während sie pdb verwenden, tun Sie dies einfach
quelle
Hier ist eine Variation von @ RichieHindles hervorragender Antwort, die einen Dekorateur implementiert, der selektiv auf gewünschte Funktionen angewendet werden kann. Funktioniert mit Python 2.7.14 und 3.6.4.
Ausgabe von Probe:
quelle
Installieren Sie Inspect-it
Code
Sie können einen Ausschnitt aus dieser Zeile erstellen
Es zeigt Ihnen eine Liste des Funktionsaufrufstapels mit einem Dateinamen und einer Zeilennummer
Liste von Anfang bis wo Sie diese Zeile setzen
quelle