检查__name__ == '__main__'
是否是在直接调用文件时运行某些代码的常用习惯用法,而不是通过模块。
在为Django的manage.py编写自定义命令的过程中,我发现自己需要使用code.InteractiveConsole
,这会给标准python shell的用户带来影响。在我正在做的一些测试代码中,我发现在我尝试执行的脚本中,我得到__name__
为__console__
,这导致我的代码(依赖于__main__
)不跑。
我很确定我的原始实现中有一些东西要改变,但它让我想知道__name__
可能有什么不同的东西。我找不到关于可能值的任何文档,也没有找到它们的含义,所以这就是我最终的结果。
答案 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__'
。
我了解其他值只能由您正在运行的代码直接设置。