
On Mar 17, 2010, at 5:02 PM, Greg Ewing wrote:
Raymond Hettinger wrote:
Python 3 doesn't need it because it is possible to not give a result at all. Python 2 does need it because we have to give *some* result.
That's not true -- it's possible for comparisons to raise an exception in 2.x, and they sometimes do already:
Complex objects do not support __float__. Decimal objects do. If an object supports __float__, then a float comparison coerces its other argument via __float__ and the other argument never gets a chance to raise an exception.
class D: def __float__(self): return 3.14
float(D()) 3.1400000000000001 float(complex(3.14))
Traceback (most recent call last): File "<pyshell#14>", line 1, in <module> float(complex(3.14)) TypeError: can't convert complex to float
D() < 10.0 True complex(3.14) < 10.0
Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> complex(3.14) < 10.0 TypeError: no ordering relation is defined for complex numbers Raymond