2012-08-10 25 views
7

Este es mi mejor solución hasta ahora al problema de acceso al módulo de llamadas desde dentro de una función:¿Cómo obtener el módulo desde el que se llamó a la función en ejecución?

import inspect 
import sys 
def calling_module(level=0): 
    filename = inspect.stack()[level+2][1] 
    modulename = inspect.getmodulename(filename) 
    try: 
     return sys.modules[modulename] 
    except KeyError: 
     return sys.modules['__main__'] 

... pero implícita en el manejo de la KeyError es el supuesto (en gran parte infundada) de que puede ocurrir solo si filename se está ejecutando como __main__.

¿La biblioteca estándar de Python proporciona una forma más robusta de hacer esto?

Respuesta

8

me parece que las siguientes obras: así

import inspect 
def printfunc() 
    stk = inspect.stack()[1] 
    mod = inspect.getmodule(stk[0]) 
    print "Currently in " + mod + "." + stk[3] 

la que tengo dentro de una función de utilidad llaman algo así como printfunc()

Cuestiones relacionadas