33

对于我的应用程序中的详细调试消息,我使用了一个返回有用前缀的函数。考虑以下示例:

import inspect

def get_verbose_prefix():
    """Returns an informative prefix for verbose debug output messages"""
    s = inspect.stack()
    module_name = inspect.getmodulename(s[1][1])
    func_name = s[1][3]

    return '%s->%s' % (module_name, func_name)

def awesome_function_name():
    print "%s: Doing some awesome stuff right here" % get_verbose_prefix()

if __name__ == '__main__':
    awesome_function_name()

这输出:

test->awesome_function_name:在这里做一些很棒的事情

我的问题是:当我在包中有一个模块时,例如“myproject.utilities.input”,返回的模块名称get_verbose_prefix仍然只是“input”,而不是“myproject.utilities.input”。当不同的子模块中可能有多个“输入”模块一起工作时,这大大降低了前缀在大型项目中的有用性。

所以我的问题是:有没有一种简单的方法可以在 Python 的包中检索完整的模块名称?我计划扩展该get_verbose_prefix功能以检查模块父目录中的“__init__.py”文件以推断它的全名,但首先我想知道是否有更简单的方法来做到这一点。

4

3 回答 3

43

__name__总是包含模块的全名。(当然,除了__main__主要的。)

于 2012-07-28T22:18:24.287 回答
8

尝试使用__name__模块的属性。

于 2012-07-28T22:17:33.663 回答
4

在其包中检索完整模块名称的简单方法:

print(__file__)
于 2016-05-27T06:48:42.970 回答