How do I return None instead of raising AttributeError?

Bernhard Herzog herzog at
Sun Sep 24 13:22:56 CEST 2000

quinn at (Quinn Dunkan) writes:

> Well, you've got the classic __getattr__ infinite recursion bug, but your
> python isn't behaving nicely about it (mine says 'Maximum recursion depth
> exceeded').  As far as solving your problem, this is sort of hackish, but it
> works, unless you want underscore attrs to not throw AttributeError, in which
> case you'll have to go to the ref guide and list out the special names:
> class A:
>     def __getattr__(self, name):
>         if (name[:2] == '__' and name[-2:] == '__'
>                 and not self.__dict__.has_key(name)):
>             raise AttributeError, name
>         return self.__dict__.get(name)

Which can easily be simplified to:

class A:
    def __getattr__(self, name):
        if (name[:2] == '__' and name[-2:] == '__'):
            raise AttributeError, name
        return None

Because __getattr__ is only called when name is not in self.__dict__
self.__dict__.has_key(name) is always false and self.__dict__.get(name)
always returns None.

Bernhard Herzog   | Sketch, a drawing program for Unix
herzog at  |

More information about the Python-list mailing list