C API PyErr_Clear vs PyObject_HasAttrString
Robin Becker
robin at SPAMREMOVEjessikat.fsnet.co.uk
Sat Nov 27 08:42:32 EST 2004
I'm trying to understand why this code causes a seg fault second time
through; the code is part of a setattr and is testing if the value is an
integer or has red, green and blue attributes. This code later goes on
to raise a ValueError if that's not the case.
if((i = PyArg_Parse(value,"i",&cv))){
c->value = cv;
c->valid = 1;
return 1;
}
rgb = PyObject_HasAttrString(value,"red")
&& PyObject_HasAttrString(value,"green")
&& PyObject_HasAttrString(value,"blue");
PyErr_Clear();
.......
PyErr_SetString(PyExc_ValueError, "bad color value");
Both calls should fail and raise ValueError, but the second call causes
a seg fault in Python 2.3.4 (not in 2.2 and earlier).
In 2.3.4 I found that moving the PyErr_Clear() before the calculation of
rgb fixes the problem.
I assume the problem is that something in the rgb calculation is failing
because the python error flag is set. Is that a bug in the
implementation of PyObject_HasAttrString or is it my fault for not
knowing which API calls need a cleared error flag?
--
Robin Becker
More information about the Python-list
mailing list