2012-08-10 9 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

私は次のようにうまく機能することを見つける:

私は printfunc()

のようなものをと呼ばれるユーティリティ関数の内部で持っている
import inspect 
def printfunc() 
    stk = inspect.stack()[1] 
    mod = inspect.getmodule(stk[0]) 
    print "Currently in " + mod + "." + stk[3] 

関連する問題