gpt4 book ai didi

python - PyErr_Set* 两次

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:04 25 4
gpt4 key购买 nike

调用 PyErr_Set* 覆盖异常是否安全?根据文档,PySequence_Fast如果有错误,则使用提供给它的 const char * 消息参数引发 TypeError。在 PySequence_Fast 引发错误后调用 PyErr_SetObject 是否安全?

例子:

static PyObject * myfunc(PyObject * self, PyObject * args) {
PyObject * pyobj;
PyObject * pyseq;
PyObject * message;

if (!PyArg_ParseTuple(args, "O", &pyobj)) {
return NULL;
}

pyseq = PySequence_Fast(pyobj, "");
if (pyseq == NULL) {
message = PyString_FromFormat("argument is a '%s', not a sequence.", pyobj->ob_type->tp_name);
PyErr_SetObject(PyExc_TypeError, message);
Py_XDECREF(message);
return NULL;
}

// ...
}

最佳答案

根据 Python 2.7.2 源代码中的“Python/errors.c”,PyErr_SetObject() 调用 PyErr_Restore() 其中 Py_XDECREF() 在设置新的异常状态变量之前设置任何旧的异常状态变量。所以是的,覆盖现有异常是安全的。请注意,您正在完全覆盖之前的异常。

关于python - PyErr_Set* 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com