In Python, wie kann ich den aktuellen Aufrufstapel innerhalb einer Methode ausgeben (zum Debuggen).
Schrieb meine eigene Dekoratorversion, bevor ich dies sah. Hochgevotet.
In Python, wie kann ich den aktuellen Aufrufstapel innerhalb einer Methode ausgeben (zum Debuggen).
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
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 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.