[Python-Dev] 'hasattr' is broken by design (original) (raw)

Yury Selivanov yselivanov at gmail.com
Tue Aug 24 04:14:07 CEST 2010


On 2010-08-23, at 10:56 AM, Guido van Rossum wrote: On Mon, Aug 23, 2010 at 7:46 AM, Benjamin Peterson <benjamin at python.org> wrote:

2010/8/23 Yury Selivanov <yselivanov at gmail.com>:

1) I propose to change 'hasattr' behaviour in Python 3, making it to swallow only AttributeError exceptions (exactly like 'getattr'). Probably, Python 3.2 release is our last chance.

I would be in support of that. I am cautiously in favor. The existing behavior is definitely a mistake and a trap. But it has been depended on for almost 20 years now. I recommend that you create a patch, apply it, run the entire stdlib test suite and see how much breaks. That will give you an idea of the damage to expect for 3rd party code.

Have done a little testing.

The patch to builtin 'hasattr' function is trivial, and can be found attached to this letter (with the corresponding unittest):

So, after applying it, hasattr swallows only AttributeError exceptions.

All tests from Python 3.2 test suite were good.

After that, I've applied the patch on Python 2.6 and tested SqlAlchemy, Django and Twisted.

I tested our internal company framework (~100K LOC) and, again, all tests passed.

-------------- next part -------------- A non-text attachment was scrubbed... Name: hasattr.patch Type: application/octet-stream Size: 2007 bytes Desc: not available URL: <http://mail.python.org/pipermail/python-dev/attachments/20100823/ab38878d/attachment.obj>



More information about the Python-Dev mailing list