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

2 投票
1 回答
987 浏览
提问于 2025-04-18 01:01

我有一个包含 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)

撰写回答