2012-08-10 4 views
7

Das ist meine beste Lösung so weit, um das Problem innerhalb einer Funktion des rufenden Modul für den Zugriff auf:Wie bekomme ich das Modul, von dem die gerade ausgeführte Funktion aufgerufen wurde?

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

... aber implizit in der Handhabung der KeyError ist die (weitgehend unbegründet) Annahme, dass es passiert nur, wenn filename als __main__ ausgeführt wird.

Bietet die Python-Standardbibliothek eine robustere Möglichkeit, dies zu tun?

Antwort

8

Ich finde, dass die folgenden Werke gut:

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

, die ich in einer Nutzenfunktion etwas wie printfunc()

genannt
Verwandte Themen