如何获取调用当前正在执行的函数的模块?

时间:2012-08-10 15:37:20

标签: python introspection

到目前为止,这是我从函数中访问调用模块的问题的最佳解决方案:

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标准库是否提供了更强大的方法来实现这一目标?

1 个答案:

答案 0 :(得分:10)

我发现以下效果很好:

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

我在一个名为printfunc()

之类的实用函数中