459 Stimmen

Drucken Sie den aktuellen Aufrufstapel aus einer Methode im Code.

In Python, wie kann ich den aktuellen Aufrufstapel innerhalb einer Methode ausgeben (zum Debuggen).

7voto

martineau Punkte 110783

Hier ist eine Variante von @RichieHindles ausgezeichneter Antwort, die einen Decorator implementiert, der selektiv auf Funktionen angewendet werden kann, wie gewünscht. Funktioniert mit Python 2.7.14 und 3.6.4.

from __future__ import print_function
import functools
import traceback
import sys

INDENT = 4*' '

def stacktrace(func):
    @functools.wraps(func)
    def wrapped(*args, **kwds):
        # Holen Sie sich alle außer der letzten Zeile, die von traceback.format_stack() zurückgegeben wird
        # das ist die untere Zeile.
        callstack = '\n'.join([INDENT + line.strip() for line in traceback.format_stack()][:-1])
        print('{}() aufgerufen:'.format(func.__name__))
        print(callstack)
        return func(*args, **kwds)

    return wrapped

@stacktrace
def test_func():
    return 42

print(test_func())

Ausgabe des Beispiels:

test_func() aufgerufen:
    Datei "stacktrace_decorator.py", Zeile 28, in 
    print(test_func())
42

0 Stimmen

Schrieb meine eigene Dekoratorversion, bevor ich dies sah. Hochgevotet.

4voto

MohitGhodasara Punkte 1717

Install Inspect-it

pip3 install inspect-it --user

Code

import inspect
print(*['{:40}| {}:{}\n'.format(x.function, x.filename, x.lineno) 
        for x in inspect.stack()])

Sie können einen Ausschnitt dieser Zeile erstellen

es zeigt Ihnen eine Liste des Funktionsaufrufstapels mit Dateiname und Zeilennummer

Liste vom Anfang bis zu dem Punkt, an dem Sie diese Zeile platziert haben

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