[Cython] hasattr() swallows any exception (Py<3.2)

Stefan Behnel stefan_ml at behnel.de
Tue Feb 22 22:21:16 CET 2011

Lisandro Dalcin, 22.02.2011 21:41:
> Take a look here: http://bugs.python.org/issue9666
> 'hasattr' default behaviour should be changed to suppress only
> AttributeError exceptions.  Other should pass through.

+1, I think I even faintly recall that discussion. What a lengthy thread...


I don't even recall when I last used hasattr(). Given how dumb it is to ask 
for an attribute, let someone else throw it away for you and then ask again 
to get it, I don't see much point in using it at all. I can write exception 
catching code myself, thanks.

> Should we do something about this in Cython? We currently use
> PyObject_HasAttr(), but even in Python 3.2 this is not the same as
> builtins.hasattr(), it swallows any exception (do you think this is a
> bug in core Python?).

It was at least considered:


> I'm inclined to fix the behavior for ALL Python
> versions to suppress only AttributeError.

How? Would you implement a hasattr() helper that uses PyObject_GetAttr() 
and Does The Right Thing?

In any case, I personally don't care so much about hasattr(), but I'm +1 
for Python compatibility, and +1 for getting the fixed Py3.2 behaviour in 
all Python versions. There's a reason this was fixed in CPython, it's a 
pretty clear bug.


More information about the cython-devel mailing list