关于python:sys.exit是否等同于提升SystemExit?

Is sys.exit equivalent to raise SystemExit?

根据有关sys.exitSystemExit的文件,似乎

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

这是正确的还是江户十一〔0〕以前做过别的事?


根据Python/sysmodule.c的说法,提高SystemExit是唯一的办法。

1
2
3
4
5
6
7
8
9
10
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和调用sys.exit在功能上是等效的。见sys模块源。

PyErr_SetObject函数是cpython如何实现引发python异常的方法。


如您在源代码https://github.com/python git/python/blob/715a6e5035b21ac493827706ec4c630d6e960/python/sysmodule.c中所见。

1
2
3
4
5
6
7
8
9
10
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;
}

它只提高系统退出,不做任何其他事情