2009-07-16 17 views
23

En otras lenguas puedo obtener el cuadro actual a través de una API de reflexión para determinar qué variables son locales con el alcance que una actualmente.En Python, ¿cómo obtengo el marco actual?

¿Hay una manera de hacer esto en Python?

+6

El primer resultado de Google para "python inspect stack frame" devuelve la respuesta que desea; http://docs.python.org/library/inspect.html – jrockway

Respuesta

33
import sys  
sys._getframe(number) 

El número es 0 para el fotograma actual y 1 para el fotograma arriba y así sucesivamente.

La mejor introducción que he encontrado para marcos en Python es here

Sin embargo, mira el módulo de inspección, ya que hace las cosas más comunes que usted quiere hacer con marcos.

-3

Ver la función dir.

lo siento, no es realmente relevante para el marco, pero sigue siendo útil.

20

utilizo estos pequeños para depuración y registro:

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 mejor respuesta sería utilizar el módulo inspect; no es una función privada en sys.

import inspect 

current_frame = inspect.currentframe() 
+2

Gracias. Pero una cosa a tener en cuenta, desde ese enlace: "Detalles de implementación de CPython: esta función se basa en el soporte de Python stack frame en el intérprete, que no se garantiza que exista en todas las implementaciones de Python. esta función devuelve None. " – twasbrillig

Cuestiones relacionadas