In altre lingue è possibile ottenere il frame corrente tramite una reflection api per determinare quali variabili sono locali rispetto all'ambito in cui sono attualmente.In Python, come ottengo il frame corrente?
C'è un modo per farlo in Python?
In altre lingue è possibile ottenere il frame corrente tramite una reflection api per determinare quali variabili sono locali rispetto all'ambito in cui sono attualmente.In Python, come ottengo il frame corrente?
C'è un modo per farlo in Python?
import sys
sys._getframe(number)
Il numero è 0 per il frame corrente e 1 per il telaio e così via fino.
La migliore introduzione che ho trovato per telai in Python è here
Tuttavia, guarda il modulo di ispezionare come fa cose più comuni che vuoi fare con cornici.
Vedere la funzione dir.
scusa: non pertinente per il frame, ma comunque utile!
io uso questi ragazzi poco per il debug e la registrazione:
import sys
def LINE(back = 0):
return sys._getframe(back + 1).f_lineno
def FILE(back = 0):
return sys._getframe(back + 1).f_code.co_filename
def FUNC(back = 0):
return sys._getframe(back + 1).f_code.co_name
def WHERE(back = 0):
frame = sys._getframe(back + 1)
return "%s/%s %s()" % (os.path.basename(frame.f_code.co_filename),
frame.f_lineno, frame.f_code.co_name)
La risposta migliore sarebbe quella di utilizzare il modulo inspect; non una funzione privata in sys
.
import inspect
current_frame = inspect.currentframe()
Grazie. Ma una cosa da notare, da quel collegamento: "Dettagli di implementazione di CPython: questa funzione si basa sul supporto di frame stack Python nell'interprete, che non è garantito che esista in tutte le implementazioni di Python .Se si esegue in un'implementazione senza il supporto per lo stack frame Python questa funzione restituisce None. " – twasbrillig
Il primo risultato di Google per "python inspect stack frame" restituisce la risposta desiderata; http://docs.python.org/library/inspect.html – jrockway