2009-07-16 20 views
23

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?

+6

Il primo risultato di Google per "python inspect stack frame" restituisce la risposta desiderata; http://docs.python.org/library/inspect.html – jrockway

risposta

33
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.

-3

Vedere la funzione dir.

scusa: non pertinente per il frame, ma comunque utile!

20

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) 
20

La risposta migliore sarebbe quella di utilizzare il modulo inspect; non una funzione privata in sys.

import inspect 

current_frame = inspect.currentframe() 
+2

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

Problemi correlati