9

これは、関数内から呼び出しモジュールにアクセスするという問題に対するこれまでの私の最善の解決策です。

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 標準ライブラリは、これを行うためのより堅牢な方法を提供していますか?

4

1 に答える 1

10

以下がうまく機能することがわかりました。

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

私は何かと呼ばれるユーティリティ関数の中に持っていますprintfunc()

于 2012-08-10T15:39:36.137 に答える