Introduction
In this article, we'll be going through a few examples of how to check if a variable is a number in Python.
Python is dynamically typed. There is no need to declare a variable type, while instantiating it - the interpreter infers the type at runtime:
variable = 4
another_variable = 'hello'
Additionally, a variable can be reassigned to a new type at any given time:
# Assign a numeric value
variable = 4
# Reassign a string value
variable = 'four'
This approach, while having advantages, also introduces us to a few issues. Namely, when we receive a variable, we typically don't know of which type it is. If we're expecting a Number, but receive variable
, we'll want to check if it's a number before working with it.
Using the type() Function
The type()
function in Python returns the type of the argument we pass to it, so it's a handy function for this purpose:
myNumber = 1
print(type(myNumber))
myFloat = 1.0
print(type(myFloat))
myString = 's'
print(type(myString))
This results in:
<class 'int'>
<class 'float'>
<class 'str'>
Thus, a way to check for the type is:
myVariable = input('Enter a number')
if type(myVariable) == int or type(myVariable) == float:
# Do something
else:
print('The variable is not a number')
Here, we check if the variable type, entered by the user is an int
or a float
, proceeding with the program if it is. Otherwise, we notify the user that they've entered a non-Number variable. Please keep in mind that if you're comparing to multiple types, such as int
or float
, you have to use the type()
function both times.
If we just said if type(var) == int or float
, which is seemingly fine, an issue would arise:
myVariable = 'A string'
if type(myVariable) == int or float:
print('The variable a number')
else:
print('The variable is not a number')
This, regardless of the input, returns:
The variable is a number
This is because Python checks for truth values of the statements. Variables in Python can be evaluated as True
except for False
, None
, 0
and empty containers like []
, {}
, set()
, ()
, ''
or ""
.
Hence when we write or float
in our if
condition, it is equivalent to writing or True
which will always evaluate to True
.
numbers.Number
A good way to check if a variable is a number is the numbers
module. You can check if the variable is an instance the Number
class, with the isinstance()
function:
import numbers
variable = 5
print(isinstance(5, numbers.Number))
This will result in:
True
Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!
Note: This approach can behave unexpectedly with numeric types outside of core Python. Certain frameworks might have non-Number
numeric implementation, in which case this approach will falsely return False
.
Using a try-except block
Another method to check if a variable is a number is using a try-except block. In the try block, we cast the given variable to an int
or float
. Successful execution of the try
block means that a variable is a number i.e. either int
or float
:
myVariable = 1
try:
tmp = int(myVariable)
print('The variable a number')
except:
print('The variable is not a number')
This works for both int
and float
because you can cast an int
to float
and a float
to an int
.
If you specifically only want to check if a variable is one of these, you should use the type()
function.
Conclusion
Python is a dynamically typed language, which means that we might receive a data type different than the one we're expecting.
In cases where we'd want to enforce data types, it's worth checking if a variable is of the desired type. In this article, we've covered three ways to check if a variable is a Number in Python.