check if object is number

Peter Hansen peter at engcorp.com
Fri Feb 11 21:58:21 EST 2005


marco wrote:
> Steven Bethard wrote:
>> Is there a good way to determine if an object is a numeric type? 
> 
> Maybe this can help?
> 
> def isnumber(x):
>     try:
>         return(x == x-0)
>     except:
>         return False

Not exactly foolproof:

 >>> def isnumber(x):
...   try: return (x == x-0)
...   except: return False
...
 >>> import numarray
 >>> a = numarray.arange(1.1, 5.5)
 >>> a
array([ 1.1,  2.1,  3.1,  4.1,  5.1])
 >>> print '%s:\t' % a, isnumber(a)
[ 1.1  2.1  3.1  4.1  5.1]:     [1 1 1 1 1]

The result is actually this:

 >>> a == a-0
array([1, 1, 1, 1, 1], type=Bool)

And if you try to call bool() on it (as perhaps
your isnumber() routine already should have, rather
than relying on == to return a boolean):

 >>> bool(a == (a-0))
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "C:\a\python24\Lib\site-packages\numarray\generic.py", line 477, in 
__nonzero__
     raise RuntimeError("An array doesn't make sense as a truth value.  Use 
sometrue(a) or alltrue(a).")
RuntimeError: An array doesn't make sense as a truth value.  Use sometrue(a) or
alltrue(a).

Yuck.

Of course, most of the other definitions of "is a number" that
have been posted may likewise fail (defined as not doing what the
OP would have wanted, in this case) with a numarray arange.
Or maybe not.  (Pretty much all of them will call an arange a
number... would the OP's function work properly with that?)

-Peter



More information about the Python-list mailing list