有没有办法防止捕获 sys.exit() 引发的 SystemExit 异常?

2024-03-03

文档说调用 sys.exit() 会引发 SystemExit 异常,该异常可以在外部级别捕获。我遇到一种情况,我想明确且毫无疑问地从测试用例内部退出,但是 unittest 模块捕获 SystemExit 并阻止退出。这通常很好,但我试图处理的具体情况是我们的测试框架检测到它被配置为指向非测试数据库。在这种情况下,我想退出并阻止运行任何进一步的测试。当然,由于 unittest 捕获了 SystemExit 并继续愉快地前进,所以它阻碍了我。

到目前为止,我想到的唯一选择是使用 ctypes 或类似直接调用 exit(3) 的东西,但这对于应该非常简单的东西来说似乎是一个非常丑陋的黑客。


您可以致电os._exit() https://docs.python.org/library/os.html#os._exit直接退出,不抛出异常:

import os
os._exit(1)

这绕过了所有 python 关闭逻辑,例如atexit模块,并且不会运行您在这种情况下试图避免的异常处理逻辑。参数是将由进程返回的退出代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法防止捕获 sys.exit() 引发的 SystemExit 异常? 的相关文章

随机推荐