2012-08-10 60 views
7

這是我最好的解決方案,到目前爲止,從函數中訪問調用模塊的問題:如何獲取當前正在執行的函數被調用的模塊?

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

...但隱含在KeyError的處理方法是(沒有根據的)假設它可以僅在filename作爲__main__運行時纔會發生。

Python標準庫是否提供了更健壯的方法來執行此操作?

回答

8

我發現了以下工作得好:

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

,我有一個效用函數中調用像printfunc()

相關問題