2012-08-10 10 views
7

Questa è la mia soluzione migliore finora al problema di accesso al modulo di chiamata all'interno di una funzione:Come ottenere il modulo da cui è stata chiamata la funzione attualmente in esecuzione?

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__'] 

... ma implicita nella gestione del KeyError è la (in gran parte infondata) presupposto che si può si verifica solo se filename viene eseguito come __main__.

La libreria standard Python fornisce un modo più efficace per eseguire questa operazione?

risposta

8

trovo che le seguenti opere: oltre

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

che ho dentro una funzione di utilità chiamato qualcosa come printfunc()

Problemi correlati