[Python-Dev] Misleading error message from PyObject_GenericSetAttr

Guido van Rossum guido at python.org
Mon Jun 19 17:18:15 CEST 2006

On 6/14/06, Alexander Belopolsky <alexander.belopolsky at gmail.com> wrote:
> When an extension type Foo defines tp_getattr, but leaves tp_setattr
> NULL, an attempt to set an attribute bar results in an AttributeError
> with the message "'Foo' object has no attribute 'bar'".  This message
> is misleading because the object may have the attribute 'bar' as
> implemented in tp_getattr.  It would be better to change the message
> to "'Foo' object has only read-only attributes (assign to .bar)" as in
> the case tp_setattro == tp_setattr == NULL in  PyObject_SetAttr .

I agree. Can you submit a patch to SF please?

> I've also noticed that the exceptions raised from PyObject_SetAttr are
> TypeErrors. Shouldn't PyObject_GenericSetAttr raise a TypeError if
> tp_setattr is null but tp_getattr is not?  This would be consistent
> with the errors from read-only descriptors.

Attempting to obtain complete consistency between TypeError and
AttributeError is hopeless. But if you want to submit a patch to
reduce a particular bit of inconsistency (without increasing it
elsewhere) it might well be accepted.

--Guido van Rossum (home page: http://www.python.org/~guido/)

More information about the Python-Dev mailing list