python教程—是否有办法防止从sys.exit()引发的SystemExit异常被捕获?-Python实用宝典

python教程—是否有办法防止从sys.exit()引发的SystemExit异常被捕获?

文档说,调用sys.exit()会引发一个SystemExit异常,这个异常可以在外层捕获。我有这样一种情况,我想确定无疑地从测试用例中退出,但是unittest模块捕获SystemExit并阻止退出。这通常很好,但是我试图处理的特定情况是,我们的测试框架检测到它被配置为指向一个非测试数据库。在这种情况下,我想退出并阻止运行任何进一步的测试。当然,由于unittest捕获了SystemExit并继续愉快地运行在它的路上,所以它在阻挠我。

文档说,调用sys.exit()会引发一个SystemExit异常,这个异常可以在外层捕获。我有这样一种情况,我想确定无疑地从测试用例中退出,但是unittest模块捕获SystemExit并阻止退出。这通常很好,但是我试图处理的特定情况是,我们的测试框架检测到它被配置为指向一个非测试数据。在这种情况下,我想退出并阻止运行任何进一步的测试。当然,由于unittest捕获了SystemExit并继续愉快地运行在它的路上,所以它在阻挠我。

到目前为止,我想到的唯一选择是使用ctypes或类似于直接调用exit(3)的方法,但对于一些应该非常简单的东西来说,这似乎是一个相当模糊的技巧。

回答

您可以调用os._exit()直接退出,而不会抛出异常:

    import os os._exit(1)

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

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论