[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