[Tutor] how to tell if strings have numbers in them

Daniel Yoo dyoo@hkn.eecs.berkeley.edu
Wed, 3 Jan 2001 20:44:33 -0800 (PST)


On Wed, 3 Jan 2001, Brett wrote:

> I'm trying to get input and checking to see if it's a number.  x==int(x) 
> works if it is a number, but causes an error if you input a string.  I made 
> a list of 0-9 and tried for z in x/if z in list, and that seems to work, 
> but its takes a lot of typing, is there an existing function that can check 
> to see if a variable is a number?

Hmmm... let's take a look:

###
>>> int("42")      
42
>>> int("forty-two")
Traceback (innermost last):
  File "<stdin>", line 1, in ?
ValueError: invalid literal for int(): forty-two
###


I see, so it throws a ValueError if something goes wrong in the
conversion.  I can't think of a built-in isNumber() function that checks
if something is a number.  However, there are several nice ways of writing
one.  Here's one:

###
def isNumber(x):
    try: int(x)
    except: return 0
    return 1
###

and it seems to work pretty well:

###
>>> isNumber("forty-two")
0
>>> isNumber("42")
1
>>> isNumber(42)
1
###

This version of isNumber() depends on the fact that bad things will cause
exceptions: that's where isNumber() returns zero.  Otherwise, isNumber()
will be happy and return one.

You might not be familiar with try/except.  It's mentioned a little bit in
the official tutorial here:

    http://python.org/doc/current/tut/node10.html

Hope this helps!