2009-07-16 9 views
23

Dans d'autres langues, je peux obtenir le cadre actuel via une API de réflexion pour déterminer quelles variables sont locales à la portée que je suis actuellement.En Python, comment obtenir l'image actuelle?

Y a-t-il un moyen de faire cela en Python?

+6

Le premier résultat de Google pour "python inspect stack frame" renvoie la réponse de votre choix; http://docs.python.org/library/inspect.html – jrockway

Répondre

33
import sys  
sys._getframe(number) 

Le nombre étant 0 pour la trame en cours et 1 pour la trame et ainsi de suite.

La meilleure introduction que j'ai trouvé aux cadres en python est here

Cependant, regardez l'inspection module comme il le fait les choses les plus courantes que vous voulez faire avec des cadres.

-3

Voir la fonction dir.

Désolé - pas vraiment pertinent pour le cadre, mais toujours utile!

20

J'utilise ces petits gars pour le débogage et l'exploitation forestière:

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 meilleure réponse serait d'utiliser le module inspect; pas une fonction privée dans sys.

import inspect 

current_frame = inspect.currentframe() 
+2

Merci. Mais une chose à noter, à partir de ce lien: "Détail de l'implémentation de CPython: Cette fonction repose sur le support de la pile Python dans l'interpréteur, qui n'est pas garanti dans toutes les implémentations de Python. cette fonction renvoie None. " – twasbrillig

Questions connexes