[Python-Dev] various unix platform build/test issues
Tim Peters
tim.one@comcast.net
Thu, 20 Feb 2003 13:47:50 -0500
[M.-A. Lemburg]
> I'd even coerce strings to floats if possible ;-)
>
> BTW, I implemented that in mxNumber for the fun of it:
> >>> from mx.Number import *
> >>> Float(1.23) + '3.45'
> 4.67999999999999998223e+0
> >>> Rational(2,3) + '3/4'
> 17/12
FixedPoint does a similar thing, coercing strings to FixedPoints by magic.
The lack of a native literal notation for FixedPoints (and rationals) makes
that more attractive than it should be <wink>.
> Seriously, the above was only meant as hint to not rely on
> nb_negative for PyNumber_Check(), but to use nb_int
> for this. After all, code using PyNumber_Check() will expect that
> at least PyNumber_Int() to work on the object. If you check
> for nb_negative, this will not always work, since then complex objects
> would get accepted.
Reality check: PyNumber_Check() checks for nb_int or nb_float now, and
complex numbers have both slots, but both raise TypeError unconditionally.
So if you believe that PyNumber_Check()'s caller expects PyNumber_Int() to
work, then PyNumber_Check() is already broken in your view. My view is that
a complex is a number whether or not it can be coerced to some other type,
but that complex is passing PyNumber_Check() more by accident than by design
now. nb_negative seems a sharper check to me.