[Cython] hasattr() swallows any exception (Py<3.2)
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