【发布时间】:2016-03-30 07:21:38
【问题描述】:
根据sys.exit 和SystemExit 上的文档,看来
def sys.exit(return_value=None): # or return_value=0
raise SystemExit(return_value)
这是正确的还是sys.exit 之前做过其他事情?
【问题讨论】:
根据sys.exit 和SystemExit 上的文档,看来
def sys.exit(return_value=None): # or return_value=0
raise SystemExit(return_value)
这是正确的还是sys.exit 之前做过其他事情?
【问题讨论】:
根据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;
}
【讨论】:
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 而没有做任何其他事情
【讨论】:
是的,提高SystemExit 和调用sys.exit 在功能上是等效的。 See sys module source.
PyErr_SetObject 函数是 CPython 实现引发 Python 异常的方式。
【讨论】:
y 以获取您当前所在提交的规范 URL,例如今天github.com/python/cpython/blob/… - 未来的提交可能会严重改变路线