对于我的应用程序中的详细调试消息,我使用的函数返回一个有用的前缀。请考虑以下示例:
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返回的模块名仍然只是’input’,而不是’myproject.utilities.input’。这在大型项目中大大降低了前缀的有用性,当不同子模块中的几个“输入”模块都可以一起使用时。
所以我的问题是:有没有一种简单的方式来检索Python中的完整模块名称?我计划扩展get_verbose_prefix函数来检查模块的父目录中的’__init__.py’文件以推断其全名,但首先我想知道是否有更简单的方法。