Is this Pythonic?

Delaney, Timothy (Tim) tdelaney at avaya.com
Mon Aug 1 18:59:37 EDT 2005


Peter Hansen wrote:

> Change those to "raise NotImplementedError('blah')" instead and you'll
> be taking the more idiomatic approach.

One thing I've noticed, which I may raise on python-dev ...
NotImplementedError does *not* play well with super() ...

class A (object):
    def test (self):
        raise NotImplementedError

class B (object):
    def test (self):
        print 'B'
        super(B, self).test()

class C (B, A):
    def test (self):
        print 'C'
        super(C, self).test()

It's actually worse than AttributeError, because the method actually
exists. In both cases though you need to know when you create the base
class how it's going to be used to work out whether a super() call is
needed.

One option is to do a try: except (AttributeError, NotImplementedError).
Yuk - talk about hiding errors :(

Tim Delaney



More information about the Python-list mailing list