sys.exit是否等同于引发SystemExit?

时间:2016-03-30 07:21:38

标签: python exception exit

根据sys.exitSystemExit上的文档,似乎

def sys.exit(return_value=None):  # or return_value=0
    raise SystemExit(return_value)

是正确的还是sys.exit之前做了别的事情?

3 个答案:

答案 0 :(得分:7)

根据Python/sysmodule.c,提升SystemExit即可。

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;
}

答案 1 :(得分:3)

正如您在源代码https://github.com/python-git/python/blob/715a6e5035bb21ac49382772076ec4c630d6e960/Python/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;
}

它只提升SystemExit并且不做任何其他事情

答案 2 :(得分:3)

是的,提出SystemExit并致电sys.exit功能相同。 See sys module source

PyErr_SetObject函数是CPython实现引发Python异常的方式。