【问题标题】:if __name__ == '__main__' not working ipython如果 __name__ == '__main__' 不工作 ipython
【发布时间】:2015-09-12 13:35:51
【问题描述】:

我无法让 if __name == '__main__' 技巧在 IPython、Spyder 环境中工作。我已经尝试了这个线程中给出的所有方法: if __name__ == '__main__' in IPython

这是我的超级简化模块

模块1.py

Class UnitTest():
    print 'Mod1 UnitTest!'

if __name__ == '__main__':
    UnitTest()

模块2.py

import Module1

Class UnitTest():
    print 'Mod2 UnitTest!'

if __name__ == '__main__':
    UnitTest()

所以我运行 Module2.py 并且我总是看到 Mod2 UnitTest 和 Mod1 UnitTest 打印。这些在 IPython 内核中执行。我只想显示 Mod2 UnitTest 消息。

知道发生了什么吗?

【问题讨论】:

  • 您使用的是类而不是函数。类声明中的代码在导入时运行。
  • 是的。请看下面我的回答。完全愚蠢的错误没有意识到类声明中的代码是在导入时运行的!!!

标签: python ipython spyder


【解决方案1】:

好吧,出于尴尬,我早些时候删除了这个问题,但如果其他新手看到这个问题,不妨分享一下。

我忘记将 UnitTest 行放在 __init__ 方法中。因此,每次定义类时都会运行单元测试,而不是实例化对象时。代码应该是:

模块1.py

Class UnitTest():
    def __init__(self):
        print 'Mod1 UnitTest!'

if __name__ == '__main__':
    UnitTest()

模块2.py

import Module1

Class UnitTest():
    def __init__(self):
        print 'Mod1 UnitTest!'

if __name__ == '__main__':
    print 'Mod2 UnitTest!'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-05
    • 2017-07-03
    • 2018-03-13
    • 2018-11-01
    • 1970-01-01
    • 2013-12-11
    • 2016-12-22
    • 2010-12-30
    相关资源
    最近更新 更多