问题

在Python中,有两个类似的命名函数,exit()sys.exit().有什么区别,我应该何时使用一个?

  最佳答案

exit 是交互式 shell 的助手 – sys.exit 打算在程序中使用。

site X {2} 模块(在启动期间自动导入,除非给出了 -S 命令行选项)将几个常量添加到名称空间中的built-in(例如exit).它们对交互式解释器shell有用,不应在程序中使用.


从技术上讲,它们基本相同:提高 SystemExit . sys.exit sysmodule.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()之后的子进程中使用).

  相同标签的其他问题

pythonexit