Wie kann ich in Python den aktuellen Aufrufstapel aus einer Methode heraus drucken (zu Debugging-Zwecken)?
Antworten
Zu viele Anzeigen?Hier ist ein Beispiel für das Abrufen des Stacks über die Traceback Modul und drucken es aus:
import traceback
def f():
g()
def g():
for line in traceback.format_stack():
print(line.strip())
f()
# Prints:
# File "so-stack.py", line 10, in <module>
# f()
# File "so-stack.py", line 4, in f
# g()
# File "so-stack.py", line 7, in g
# for line in traceback.format_stack():
Wenn Sie wirklich nur den Stack auf stderr ausgeben wollen, können Sie verwenden:
traceback.print_stack()
Oder um nach stdout zu drucken (nützlich, wenn Sie umgeleitete Ausgaben zusammenhalten wollen), verwenden Sie:
traceback.print_stack(file=sys.stdout)
Aber die Beschaffung über traceback.format_stack()
können Sie damit machen, was Sie wollen.
inspect.stack()
gibt den aktuellen Stack und nicht den Traceback der Ausnahme zurück:
import inspect
print inspect.stack()
Véase https://gist.github.com/FredLoney/5454553 für eine log_stack-Dienstprogrammfunktion.
Wenn Sie den Python-Debugger verwenden, können Sie nicht nur Variablen interaktiv untersuchen, sondern auch den Aufrufstapel mit dem Befehl "where" oder "w" abrufen.
Also am Anfang Ihres Programms
import pdb
Dann in dem Code, wo Sie sehen wollen, was passiert
pdb.set_trace()
und Sie werden zu einer Eingabeaufforderung weitergeleitet
- See previous answers
- Weitere Antworten anzeigen