unittest.main()使Spyder中的python解释器崩溃

Lon*_*Rob 2 python spyder python-unittest

我有一个python脚本,其中包含一个unittest.TestCase,一个setUp()函数和少量的test_foo_does_bar()-type函数。

脚本结束如下:

if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

当我在Spyder中运行此脚本时(请参阅下面的配置详细信息),解释器将在以下行停止:

----------------------------------------------------------------------
Ran x tests in x.xxxs

FAILED (failures=x)
Run Code Online (Sandbox Code Playgroud)

Ctrl + C或Ctrl + D都无法解救解释器并使我返回提示。从命令提示符运行的相同脚本正常终止。

这是Spyder中的错误还是我遗漏了一些东西?

设置信息: Spyder 2.2.3 Python 2.7.5 64位。Windows上的Qt 4.8.4,PyQt4(API v2)4.9.6

Rob*_*rto 5

它不会使Python解释器崩溃,它会终止它。这是脚本的正常行为。
您可以自己看到它:main.py上面写着main = TestProgram;这意味着unittest.main()将调用TestProgram类,该类在其__init__(self)call self.runTests()中以以下结尾:

if self.exit:
    sys.exit(not self.result.wasSuccessful())
Run Code Online (Sandbox Code Playgroud)

因此,它具有对的特定调用sys.exit(),从而终止了解释器。

实际上,如果将其作为命令行运行,则返回到命令行。如果您启动命令行Python,导入模块并调用函数,您将看到您将返回命令提示符-您无需停留在Python中。

如果您希望脚本不终止解释器,请在调用函数时声明它:

unittest.main(exit=False)
Run Code Online (Sandbox Code Playgroud)