On Mar 17, 2010, at 1:59 PM, Steven D'Aprano wrote:

On Thu, 18 Mar 2010 07:44:21 am Raymond Hettinger wrote:
The spectrum of options from worst to best is
1) compare but give the wrong answer
2) compare but give the right answer
3) refuse to compare.

Why is 3 the best? If there is a right answer to give, surely giving the
right answer it is better than not?

From the early days of the decimal module,
we've thought that mixed float-decimal operations
are 1) a bit perilous and 2) have few, if any good
use cases.     

Accordingly, any mixed operations should be explicit 
rather than implicit:

     Decimal('1.1') + Decimal.from_float(2.2)

is better than:

     Decimal('1.1') + 2.2

To help the user avoid confusion, we flag the latter with a TypeError:
unsupported operand type(s) for +: 'Decimal' and 'float'.

Unfortunately, in Py2.x, implicit mixed comparisons do not
raise an exception, and instead will silently fail by giving 
an incorrect answer: 

    >>> Decimal('1.1') < 2.2
    False

IMO, raising the exception is the right thing to do.
Short of that though, if we're going to give a result,
it should at least be a correct one.


Raymond


New zen:

* right answers are better wrong
* but ill-formed questions are best not answered at all