Testing Whether a String Represents an Integer
Credit: Robin Parmar
Problem
You want to know whether the contents of a string represent an integer (which is not quite the same thing as checking whether the string contains only digits).
Solution
try/except is almost
invariably the best approach to such validation problems:
def isInt(astring):
""" Is the given string an integer? """
try: int(astring)
except ValueError: return 0
else: return 1Testing if a string contains only digits is a different problem:
def isAllDigits(astring):
""" Is the given string composed entirely of digits? """
# In Python 2.0 and later, "astring.isdigit( ) or not astring" is faster
import string
acceptable_characters = string.digits
for acharacter in astring:
if acharacter not in acceptable_characters:
return 0
return 1Discussion
It’s always a good idea to make a Python source file
runnable as a script, as well as usable via
import. When run as a script, some kind of unit
test or demo code executes. In this case, for example, we can finish
up the little module containing this recipe’s
functions with:
if _ _name_ _ == '_ _main_ _':
print isInt('23')
print isInt('sd')
print isInt('233835859285')
print isAllDigits('233835859285')Running the module as a script will now confirm that
23 represents an integer, sd
does not, and neither does 233835859285 (because
it’s too large—it would need an integer
greater than sys.maxint, which is impossible by
definition). However, as the fourth and last print statement shows, even ...