题
对于我的应用程序中的详细调试消息,我使用一个返回有用前缀的函数。考虑以下示例:
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: Doing some awesome stuff right here
我的问题是: 当我在包中有一个模块时,例如“myproject.utilities.input”,模块名称从返回 get_verbose_prefix
仍然只是“输入”,而不是“myproject.utilities.input”。当不同子模块中可以有多个“输入”模块一起工作时,这大大降低了大型项目中前缀的有用性。
所以我的问题是: 有没有一种简单的方法可以检索 Python 包中的完整模块名称?我正计划扩大 get_verbose_prefix
函数来检查模块父目录中的“__init__.py”文件以推断其全名,但首先我想知道是否有更简单的方法来做到这一点。
解决方案
__name__
始终包含模块的全名。(以外 __main__
当然是在主线。)
其他提示
尝试使用 __name__
模块的属性。
检索包中完整模块名称的简单方法:
print(__file__)
不隶属于 StackOverflow