459 Stimmen

Drucken des aktuellen Aufrufstapels einer Methode im Code

Wie kann ich in Python den aktuellen Aufrufstapel aus einer Methode heraus drucken (zu Debugging-Zwecken)?

516voto

RichieHindle Punkte 256891

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.

157voto

Mark Roddy Punkte 25266
import traceback
traceback.print_stack()

116voto

mouserat Punkte 1107

Für diejenigen, die den Aufrufstapel bei der Verwendung von pdb ausdrucken müssen, reicht es, wenn Sie

(Pdb) where

82voto

Fred Loney Punkte 681

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.

23voto

Keir Punkte 467

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X