[Python-Dev] Decimal & returning NotImplemented (or not)

M.-A. Lemburg mal at egenix.com
Thu Mar 10 11:15:42 CET 2005

Nick Coghlan wrote:
> Guido van Rossum wrote:
>> No, the reason is that if we did this with exceptions, it would be
>> liable to mask errors; an exception does not necessarily originate
>> immediately with the code you invoked, it could have been raised by
>> something else that was invoked by that code. The special value
>> NotImplemented must pretty much originate directly in the invoked
>> code, since the implementation guarantees that e.g. a+b can never
>> *return* NotImplemented: if a.__add__(b) and b.__radd__(a) both return
>> NotImplemented, TypeError is raised.
> That makes sense - although for that reasoning, a TypeError subclass 
> that the binary operation machinery promotes to a standard TypeError 
> would seem to work too (with the advantage of also raising at least some 
> sort of exception when the method is called directly)

I have to correct Guido's explanation a bit: the original reason
for using a special singleton instead of an exception was indeed
a significant difference in performance (raising exceptions at
the Python level is expensive, not so much at the C level).
I don't remember the details, but I did some measurements at
the time which made the decision to use a singleton rather
easy :-)

The NotImplemented singleton was part of the coercion
proposal: http://www.egenix.com/files/python/CoercionProposal.html
(pretty old stuff, now that I look at it again ;-)

That said, Guido's point is just valid. We would have had to
add code that saves the current exception to avoid masking
any pending errors - code like that always turns into a
mess sooner or later.

Marc-Andre Lemburg

Professional Python Services directly from the Source  (#1, Mar 10 2005)
 >>> Python/Zope Consulting and Support ...        http://www.egenix.com/
 >>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
 >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/

::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::

More information about the Python-Dev mailing list