[Python-Dev] Re: changing AttributeError to TypeError

Guido van Rossum guido@digicool.com
Sun, 08 Jul 2001 20:33:15 -0400


> guido wrote:
> 
> > Q. If an operation that failed with an AttributeError now fails with a
> > TypeError (or the other way around), how important is that
> > incompatibility?
> 
> what operations do you have in mind?  

The specific example was this:

    class C: pass
    list(C())

The second line used to raise AttributeError: 'C' instance has no
attribute '__len__'; now it raises TypeError: iter() of non-sequence.

But I imagine there will be others, caused by the different (IMO
better) way of implementing getattr for most built-in types.  (Note
that I'm hardly touching "classic" classes -- that's a post-2.2 job if
there ever was one.)

>     cd Lib
>     grep "except.*\(AttributeError\|TypeError\)" *.py */*.py */*/*.py
> 
> gives me about 75 hits in the 2.0 standard library; looks like all but
> one would break if you changed *all* attribute errors to type errors,
> and vice versa...
> 
> if this change doesn't affect any code in the standard library,
> changes are that it'll only break a few of the ~1000 uses I found
> in my company's code repository...
> 
> </F>

Not clear what that means...

I tend to fix the test suite when it tests for too specific an error.
I don't think there are many cases in the library proper that are
sensitive to the kind of thing that might change.

--Guido van Rossum (home page: http://www.python.org/~guido/)