[Python-ideas] checking for identity before comparing built-in objects
Terry Reedy
tjreedy at udel.edu
Mon Oct 8 23:17:56 CEST 2012
On 10/8/2012 12:47 PM, Guido van Rossum wrote:
> this as well. Also, IIUC the IEEE library prescribes exceptions as
> well as return values; e.g. "man 3 log" on my OSX computer says that
> log(0) returns -inf as well as raise a divide-by-zero exception. So I
> think this is probably compliant with the standard -- one can decide
> to ignore the exceptions in certain contexts and honor them in others.
> (Probably even the 1/0 behavior can be defended this way.)
I agree. In C, as I remember, a function can both (passively) 'raise an
exception' by setting errno *and* return a value. This requires the
programmer to check for an exception, and forgetting to do so is a
common bug. In Python, raising an exception actively aborts returning a
value, so you had to choose one of the two behaviors.
>> Some other operations behave inconsistently:
>>
>>>>> 2 * 10.**308
>> inf
>>
>> but
>>>>> 10.**309
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> OverflowError: (34, 'Result too large')
>
> Probably the same. IEEE 754 may be more complex than you think!
Or this might be an accidental inconsistency, in that float
multiplication was changed to return inf but pow was not. But I would be
reluctant to fiddle with such details now.
Alexander, while I might have chosen to make nan == nan True, I consider
it a near tossup with no happy resolution and would not change it now.
Guido's explanation is pretty clear: he went with the IEEE standard as
interpreted for Python by Tim Peters.
--
Terry Jan Reedy
More information about the Python-ideas
mailing list