Ist es sicher, PyErr_Set*
aufzurufen, um eine Ausnahme zu überschreiben? Laut der Dokumentation löst PySequence_Fast
einen TypeError
mit dem Nachrichtenargument const char *
aus, das ihm bei einem Fehler übergeben wird. Wäre es sicher, PyErr_SetObject
zu rufen, nachdem PySequence_Fast
einen Fehler verursacht?PyErr_Set * zweimal
Beispiel:
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;
}
// ...
}