Benjamin Peterson wrote: > 2009/6/15 Nick Coghlan <ncogh...@gmail.com>: >> Guido van Rossum wrote: >>> In general, CPython isn't always consistent in raising AttributeError >>> and TypeError when it comes to such policy issues: there are various >>> places that raise TypeError in typeobject.c (and probably elsewhere) >>> that simply forbid setting a specific attribute (another example is >>> __name__). >> We're pretty inconsistent when it comes to looking up special methods as >> well - those that are looked up through dedicated slots in abstract.c >> usually raise TypeError, while those that are looked up via a PyType >> method usually raise AttributeError. > > What's a PyType method?
I was misremembering - for some reason I thought: a) _PyObject_LookupSpecial was a PyType method b) That it raised AttributeError itself instead of letting the caller decide what error to raise It's still the case that (e.g.) special_lookup() in ceval.c raises an AttributeError, as do special method lookups from Python of the form "type(obj).__method__(obj)". Whether CPython raises TypeError or AttributeError when it comes to special methods is really pretty arbitrary rather than a matter of any grand design. Cheers, Nick. P.S. If anyone feels like digging into the archives, the last time I can recall this topic coming up is when I was concerned about the original with statement implementation raising AttributeError rather than TypeError when it couldn't find an __enter__ or __exit__ method. Guido chimed in then (as now) to say that either exception was fine. -- Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia --------------------------------------------------------------- _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com