[Python-Dev] 'hasattr' is broken by design

Benjamin Peterson benjamin at python.org
Tue Aug 24 15:45:19 CEST 2010


2010/8/24 Hrvoje Niksic <hrvoje.niksic at avl.com>:
> On 08/24/2010 02:31 PM, Benjamin Peterson wrote:
>>
>> 2010/8/24 Hrvoje Niksic<hrvoje.niksic at avl.com>:
>>>
>>>  The __length_hint__ lookup expects either no exception or
>>> AttributeError,
>>>  and will propagate others.  I'm not sure if this is a bug.  On the one
>>> hand,
>>>  throwing anything except AttributeError from __getattr__ is bad style
>>> (which
>>>  is why we fixed the bug by deriving our business exception from
>>>  AttributeError), but the __length_hint__ check is supposed to be an
>>> internal
>>>  optimization completely invisible to the caller of list().
>>
>> __length_hint__ is internal and undocumented, so it can do whatever it
>> wants.
>
> Of course, but that's beside the point.  In this case __length_hint__ was
> neither implemented in the class, nor were we aware of its existence, and
> the code still broke (as in the example in previous mail).  The point I'm
> making is that:
>
> a) a "business" case of throwing anything other than AttributeError from
> __getattr__ and friends is almost certainly a bug waiting to happen, and
>
> b) making the proposed change is bound to break real, production code.

I agree with. This is why the change is not making its way into any
maintenance release.



-- 
Regards,
Benjamin


More information about the Python-Dev mailing list