unittest.main()使Spyder中的Python解释器崩溃
我有一个包含 unittest.TestCase
的 Python 脚本,这里面有一个 setUp()
函数和几个类似 test_foo_does_bar()
的测试函数。
这个脚本的结尾部分如下:
if __name__ == '__main__':
unittest.main()
当我在 Spyder 中运行这个脚本时(下面有配置的详细信息),解释器会停在以下这一行:
----------------------------------------------------------------------
Ran x tests in x.xxxs
FAILED (failures=x)
无论我按多少次 Ctrl+C 或 Ctrl+D,都无法让解释器恢复到提示符状态。而同样的脚本在命令提示符下运行时却能正常结束。
这是 Spyder 的一个 bug 还是我漏掉了什么?
设置信息:Spyder 2.2.3,Python 2.7.5 64位,Qt 4.8.4,PyQt4 (API v2) 4.9.6,运行在 Windows 上。
1 个回答
5
这并不是让Python解释器崩溃,而是让它结束。这是脚本的正常行为。
你可以自己看看:在 main.py
文件中,有一行写着 main = TestProgram
;这意味着 unittest.main()
会调用 TestProgram
这个类,而在这个类的 __init__(self)
方法里,会调用 self.runTests()
,最后会执行这个:
if self.exit:
sys.exit(not self.result.wasSuccessful())
所以这里有一个明确的调用 sys.exit()
,这个调用会结束解释器。
实际上,如果你在命令行运行它,你会返回到命令行;如果你在命令行启动Python,导入这个模块并调用这个函数,你会发现你会返回到命令提示符 - 你不会停留在Python环境里。
如果你希望脚本不结束解释器,只需要在调用这个函数时做个说明:
unittest.main(exit=False)