Python 中 exit() 和 sys.exit() 的区别

新手上路,请多包涵

在 Python 中,有两个名称相似的函数, exit()sys.exit() 。有什么区别,我什么时候应该使用一个而不是另一个?

原文由 Drake Guan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 436
2 个回答

exit 是交互式 shell 的助手 - sys.exit 旨在用于程序中。

site 模块(在启动期间自动导入,除非给出 -S 命令行选项)向内置命名空间添加几个常量 (例如 exit它们对交互式解释器 shell 很有用,不应在程序中使用


从技术上讲,它们的作用基本相同:提高 SystemExitsys.exitsysmodule.c 中这样做:

 static PyObject *
sys_exit(PyObject *self, PyObject *args)
{
    PyObject *exit_code = 0;
    if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code))
        return NULL;
    /* Raise SystemExit so callers may catch it or clean up. */
    PyErr_SetObject(PyExc_SystemExit, exit_code);
   return NULL;
}

exit 分别在 site.py_sitebuiltins.py 中定义。

 class Quitter(object):
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return 'Use %s() or %s to exit' % (self.name, eof)
    def __call__(self, code=None):
        # Shells like IDLE catch the SystemExit, but listen when their
        # stdin wrapper is closed.
        try:
            sys.stdin.close()
        except:
            pass
        raise SystemExit(code)
__builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit')


请注意,还有第三个退出选项,即 os._exit ,它会在不调用清理处理程序、刷新 stdio 缓冲区等的情况下退出(通常应该只在 fork() 之后的子进程中使用)。

原文由 miku 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果我在代码中使用 exit() 并在 shell 中运行它,它会显示一条消息询问我是否要终止该程序。这真的很令人不安。 看这里

但是 sys.exit() 在这种情况下更好。它关闭程序并且不创建任何对话框。

原文由 Ramisa Anjum Aditi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题