How to check if string input is a number?

PythonInputTypes

Python Problem Overview


How do I check if a user's string input is a number (e.g. -1, 0, 1, etc.)?

user_input = input("Enter something:")

if type(user_input) == int:
    print("Is a number")
else:
    print("Not a number")

The above won't work since input always returns a string.

Python Solutions


Solution 1 - Python

Simply try converting it to an int and then bailing out if it doesn't work.

try:
    val = int(userInput)
except ValueError:
    print("That's not an int!")

See Handling Exceptions in the official tutorial.

Solution 2 - Python

Apparently this will not work for negative values, but it will for positive numbers.

Use isdigit()

if userinput.isdigit():
    #do stuff

Solution 3 - Python

The method isnumeric() will do the job (Documentation for python3.x):

>>>a = '123'
>>>a.isnumeric()
True

But remember:

>>>a = '-1'
>>>a.isnumeric()
False

isnumeric() returns True if all characters in the string are numeric characters, and there is at least one character.

So negative numbers are not accepted.

:):):)

Solution 4 - Python

For Python 3 the following will work.

userInput = 0
while True:
  try:
     userInput = int(input("Enter something: "))       
  except ValueError:
     print("Not an integer!")
     continue
  else:
     print("Yes an integer!")
     break 

Solution 5 - Python

EDITED: You could also use this below code to find out if its a number or also a negative

import re
num_format = re.compile("^[\-]?[1-9][0-9]*\.?[0-9]+$")
isnumber = re.match(num_format,givennumber)
if isnumber:
    print "given string is number"

you could also change your format to your specific requirement. I am seeing this post a little too late.but hope this helps other persons who are looking for answers :) . let me know if anythings wrong in the given code.

Solution 6 - Python

If you specifically need an int or float, you could try "is not int" or "is not float":

user_input = ''
while user_input is not int:
    try:
        user_input = int(input('Enter a number: '))
        break
    except ValueError:
        print('Please enter a valid number: ')

print('You entered {}'.format(user_input))

If you only need to work with ints, then the most elegant solution I've seen is the ".isdigit()" method:

a = ''
while a.isdigit() == False:
    a = input('Enter a number: ')

print('You entered {}'.format(a))

Solution 7 - Python

Works fine for check if an input is a positive Integer AND in a specific range

def checkIntValue():
    '''Works fine for check if an **input** is
   a positive Integer AND in a specific range'''
    maxValue = 20
    while True:
        try:
            intTarget = int(input('Your number ?'))
        except ValueError:
            continue
        else:
            if intTarget < 1 or intTarget > maxValue:
                continue
            else:
                return (intTarget)

Solution 8 - Python

I would recommend this, @karthik27, for negative numbers

import re
num_format = re.compile(r'^\-?[1-9][0-9]*\.?[0-9]*')

Then do whatever you want with that regular expression, match(), findall() etc

Solution 9 - Python

the most elegant solutions would be the already proposed,

a=123
bool_a = a.isnumeric()

Unfortunatelly it doesn't work both for negative integers and for general float values of a. If your point is to check if 'a' is a generic number beyond integers i'd suggest the following one, which works for every kind of float and integer :). Here is the test:

def isanumber(a):

    try:
        float(repr(a))
        bool_a = True
    except:
        bool_a = False

    return bool_a


a = 1 # integer
isanumber(a)
>>> True

a = -2.5982347892 # general float
isanumber(a)
>>> True

a = '1' # actually a string
isanumber(a)
>>> False

I hope you find it useful :)

Solution 10 - Python

natural: [0, 1, 2 ... ∞]

Python 2

it_is = unicode(user_input).isnumeric()

Python 3

it_is = str(user_input).isnumeric()

integer: [-∞, .., -2, -1, 0, 1, 2, ∞]

try:
    int(user_input)
    it_is = True
except ValueError:
    it_is = False
 

float: [-∞, .., -2, -1.0...1, -1, -0.0...1, 0, 0.0...1, ..., 1, 1.0...1, ..., ∞]

try:
    float(user_input)
    it_is = True
except ValueError:
    it_is = False

Solution 11 - Python

You can use the isdigit() method for strings. In this case, as you said the input is always a string:

    user_input = input("Enter something:")
    if user_input.isdigit():
        print("Is a number")
    else:
        print("Not a number")

Solution 12 - Python

This solution will accept only integers and nothing but integers.

def is_number(s):
	while s.isdigit() == False:
		s = raw_input("Enter only numbers: ")
	return int(s)


# Your program starts here    
user_input = is_number(raw_input("Enter a number: "))

Solution 13 - Python

This works with any number, including a fraction:

import fractions

def isnumber(s):
   try:
     float(s)
     return True
   except ValueError:
     try: 
       Fraction(s)
       return True
     except ValueError: 
       return False

Solution 14 - Python

Why not divide the input by a number? This way works with everything. Negatives, floats, and negative floats. Also Blank spaces and zero.

numList = [499, -486, 0.1255468, -0.21554, 'a', "this", "long string here", "455 street area", 0, ""]

for item in numList:

    try:
    	print (item / 2) #You can divide by any number really, except zero
    except:
	    print "Not A Number: " + item

Result:

249
-243
0.0627734
-0.10777
Not A Number: a
Not A Number: this
Not A Number: long string here
Not A Number: 455 street area
0
Not A Number: 

Solution 15 - Python

I know this is pretty late but its to help anyone else that had to spend 6 hours trying to figure this out. (thats what I did):

This works flawlessly: (checks if any letter is in the input/checks if input is either integer or float)

a=(raw_input("Amount:"))

try:
    int(a)
except ValueError:
    try:
        float(a)
    except ValueError:
        print "This is not a number"
        a=0


if a==0:
    a=0
else:
    print a
    #Do stuff

Solution 16 - Python

Here is a simple function that checks input for INT and RANGE. Here, returns 'True' if input is integer between 1-100, 'False' otherwise

def validate(userInput):

    try:
        val = int(userInput)
        if val > 0 and val < 101:
            valid = True
        else:
            valid = False
        
    except Exception:
        valid = False
    
    return valid

Solution 17 - Python

I've been using a different approach I thought I'd share. Start with creating a valid range:

valid = [str(i) for i in range(-10,11)] #  ["-10","-9...."10"] 

Now ask for a number and if not in list continue asking:

p = input("Enter a number: ")

while p not in valid:
    p = input("Not valid. Try to enter a number again: ")
    

Lastly convert to int (which will work because list only contains integers as strings:

p = int(p)

Solution 18 - Python

I also ran into problems this morning with users being able to enter non-integer responses to my specific request for an integer.

This was the solution that ended up working well for me to force an answer I wanted:

player_number = 0
while player_number != 1 and player_number !=2:
    player_number = raw_input("Are you Player 1 or 2? ")
    try:
        player_number = int(player_number)
    except ValueError:
        print "Please enter '1' or '2'..."

I would get exceptions before even reaching the try: statement when I used

player_number = int(raw_input("Are you Player 1 or 2? ") 

and the user entered "J" or any other non-integer character. It worked out best to take it as raw input, check to see if that raw input could be converted to an integer, and then convert it afterward.

Solution 19 - Python

Here is the simplest solution:

a= input("Choose the option\n")

if(int(a)):
    print (a);
else:
    print("Try Again")

Solution 20 - Python

while True:
    b1=input('Type a number:')
    try:
        a1=int(b1)
    except ValueError:
        print ('"%(a1)s" is not a number. Try again.' %{'a1':b1})       
    else:
        print ('You typed "{}".'.format(a1))
        break

This makes a loop to check whether input is an integer or not, result would look like below:

>>> %Run 1.1.py
Type a number:d
"d" is not a number. Try again.
Type a number:
>>> %Run 1.1.py
Type a number:4
You typed 4.
>>> 

Solution 21 - Python

If you wanted to evaluate floats, and you wanted to accept NaNs as input but not other strings like 'abc', you could do the following:

def isnumber(x):
    import numpy
    try:
        return type(numpy.float(x)) == float
    except ValueError:
        return False

Solution 22 - Python

try this! it worked for me even if I input negative numbers.

  def length(s):
	return len(s)

   s = input("Enter the String: ")
    try:
    	if (type(int(s)))==int :
    		print("You input an integer")
    		
    except ValueError:		
        print("it is a string with length " + str(length(s)))	

Solution 23 - Python

This will work:

print(user_input.isnumeric())

This checks if the string has only numbers in it and has at least a length of 1. However, if you try isnumeric with a string with a negative number in it, isnumeric will return False.

Now this is a solution that works for both negative and positive numbers

try:
    user_input = int(user_input)
except ValueError:
    process_non_numeric_user_input()  # user_input is not a numeric string!
else:
    process_user_input()

Solution 24 - Python

You Can Type:

user_input = input("Enter something: ")

if type(user_input) == int:
    print(user_input, "Is a number")
else:
    print("Not a number")
  
try:
    val = int(user_input)
except ValueError:
    print("That's not an int!")

Solution 25 - Python

Checking for Decimal type:

import decimal
isinstance(x, decimal.Decimal)

Solution 26 - Python

Based on inspiration from answer. I defined a function as below. Looks like its working fine. Please let me know if you find any issue

def isanumber(inp):
    try:
        val = int(inp)
        return True
    except ValueError:
        try:
            val = float(inp)
            return True
        except ValueError:
            return False

Solution 27 - Python

a=10

isinstance(a,int)  #True

b='abc'

isinstance(b,int)  #False

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTrufaView Question on Stackoverflow
Solution 1 - PythonDaniel DiPaoloView Answer on Stackoverflow
Solution 2 - PythonjmichalicekView Answer on Stackoverflow
Solution 3 - PythonAndrés FernándezView Answer on Stackoverflow
Solution 4 - PythonRazorXView Answer on Stackoverflow
Solution 5 - Pythonkarthik27View Answer on Stackoverflow
Solution 6 - PythonWoodyView Answer on Stackoverflow
Solution 7 - Pythonuser2196332View Answer on Stackoverflow
Solution 8 - Pythonrachit_vermaView Answer on Stackoverflow
Solution 9 - PythonJosé Crespo BarriosView Answer on Stackoverflow
Solution 10 - PythonLuis SieiraView Answer on Stackoverflow
Solution 11 - PythonRaj ShahView Answer on Stackoverflow
Solution 12 - PythonSalamView Answer on Stackoverflow
Solution 13 - PythonAntoni Gual ViaView Answer on Stackoverflow
Solution 14 - PythonSPYBUG96View Answer on Stackoverflow
Solution 15 - PythonReadyToHelpView Answer on Stackoverflow
Solution 16 - PythonJesse DowningView Answer on Stackoverflow
Solution 17 - PythonAnton vBRView Answer on Stackoverflow
Solution 18 - PythonJohn WorrallView Answer on Stackoverflow
Solution 19 - PythonAkshay SahaiView Answer on Stackoverflow
Solution 20 - PythonNima SajediView Answer on Stackoverflow
Solution 21 - PythonryanjdillonView Answer on Stackoverflow
Solution 22 - PythonEmman Lopez TelewikView Answer on Stackoverflow
Solution 23 - PythonBgil MidolView Answer on Stackoverflow
Solution 24 - PythonTechnicals mirchisView Answer on Stackoverflow
Solution 25 - PythonAidinZadehView Answer on Stackoverflow
Solution 26 - PythonSibi JayanView Answer on Stackoverflow
Solution 27 - PythonsachkhView Answer on Stackoverflow