C API PyErr_Clear vs PyObject_HasAttrString

Robin Becker robin at SPAMREMOVEjessikat.fsnet.co.uk
Sun Nov 28 05:49:16 EST 2004


Andrew MacIntyre wrote:
.....
> 
> Rule:  if you call a Python API function, _always_ check its return
>        status (unless documented as void).  if it fails, check for an
>        exception.  if you want to ignore the exception, clear the
>        exception, otherwise cleanup and bailout.
> 
> This is a paraphrase (from memory) of a previous reply from Tim Peters.
> 
> Notwithstanding this, segfaulting in a Python API function is not welcome
> (especially one documented as always succeeding!).
> 
> I had a look at the source (from a CVS checkout this morning), and the
> only thing that looks like a source of such trouble would be an extension
> class with a tp_getattr implementation.

It is such a beast, but the exciting test case looks like

#####################
import _test
g=_test.gstate()

for a in ('strokeColor','strokeColor'):
	try:
		setattr(g,a,(1,2,3))
		print 'Wrong handling of bad '+a
	except ValueError:
		pass
#####################

so the tp_getattr slot isn't being used.
> 
> If you are using such a beast, you might want to look at the tp_getattr
> implementation first.  Otherwise I'd suggest filing a bug report on SF.
> BTW, have you tried this with 2.4c1?

Can't today, but I'll try and build the cut down extension with 2.4c1 
tomorrow.
-- 
Robin Becker



More information about the Python-list mailing list