Python脚本中__name__有哪些不同的可能值,它们是什么意思?

时间:2009-07-10 21:59:09

标签: python

检查__name__ == '__main__'是否是在直接调用文件时运行某些代码的常用习惯用法,而不是通过模块。

在为Django的manage.py编写自定义命令的过程中,我发现自己需要使用code.InteractiveConsole,这会给标准python shell的用户带来影响。在我正在做的一些测试代码中,我发现在我尝试执行的脚本中,我得到__name____console__,这导致我的代码(依赖于__main__)不跑。

我很确定我的原始实现中有一些东西要改变,但它让我想知道__name__可能有什么不同的东西。我找不到关于可能值的任何文档,也没有找到它们的含义,所以这就是我最终的结果。

2 个答案:

答案 0 :(得分:6)

来自类代码的document .InteractiveInterpreter([locals]):
可选的locals参数指定将在其中执行代码的字典;它默认为新创建的字典,其中键'__name__'设置为'__console__',键'__doc__'设置为None。 也许你可以转动本地参数,用__name__设置__main__,或者从

更改测试子句
if __name__ == '__main__'
to  
if __name__ in set(["__main__", "__console__"])

希望它有所帮助。

答案 1 :(得分:4)

__name__通常是模块名称,但当有问题的模块直接执行而不是被另一个模块导入时,它会更改为'__main__'

我了解其他值只能由您正在运行的代码直接设置。