2012-03-30 7 views
3

Wie bekomme ich einen Stack-Frame in übergeben?Erhalten Stapelrahmen

Von Python 3.3a1 docs:

traceback.print_stack(f=None, limit=None, file=None)

Diese Funktion druckt einen Stack-Trace von seinem Aufruf Punkt. Das optionale Argument f kann verwendet werden, um einen alternativen Stack-Frame zum Starten anzugeben. Die optionalen Begrenzungs- und Dateiargumente haben die gleiche Bedeutung wie für print_exception().

Aber nirgends in den Dokumenten habe ich einen Weg gefunden, tatsächlich einen Stapelrahmen zu erhalten. Um genau zu sein, nehmen wir an, ich möchte den Stack-Trace beginnend eine Ebene über dem Aufrufpunkt drucken. Wie kann ich das machen?

Antwort

2

inspect.stack() erhalten Sie den aktuellen Stapel als Liste. Sie können einen beliebigen Rahmen auswählen. Sie können z.B. inspect.currentframe().f_back, um den Rahmen Ihres Anrufers zu erhalten. Grundsätzlich ist das inspect Modul, wo es ist.

2

This Dokumentation gibt Informationen über Funktionen, die Sie verwenden könnten, um einen Stapelrahmen zu erhalten, z. B. inspect.currentframe().

1

Zusätzlich Modul zu überprüfen, können Sie versuchen:

import sys 
sys._getframe(1) 

oder

import sys 
sys._getframe().f_back 

gewarnt es eine private Funktion ist, können einige Versionen von Python nicht implementieren.