2

PyErr_Set*例外をオーバーライドするために呼び出しても安全ですか? ドキュメントによると、エラーが発生した場合、メッセージ引数が指定されPySequence_Fastた aが発生します。エラーが発生した後に呼び出しても安全でしょうか?TypeErrorconst char *PyErr_SetObjectPySequence_Fast

例:

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

    // ...
}
4

1 に答える 1