How to check if a variable is an integer or a string? [duplicate]
Solution 1:
In my opinion you have two options:
-
Just try to convert it to an
int
, but catch the exception:try: value = int(value) except ValueError: pass # it was a string, not an int.
This is the Ask Forgiveness approach.
-
Explicitly test if there are only digits in the string:
value.isdigit()
str.isdigit()
returnsTrue
only if all characters in the string are digits (0
-9
).The
unicode
/ Python 3str
type equivalent isunicode.isdecimal()
/str.isdecimal()
; only Unicode decimals can be converted to integers, as not all digits have an actual integer value (U+00B2 SUPERSCRIPT 2 is a digit, but not a decimal, for example).This is often called the Ask Permission approach, or Look Before You Leap.
The latter will not detect all valid int()
values, as whitespace and +
and -
are also allowed in int()
values. The first form will happily accept ' +10 '
as a number, the latter won't.
If your expect that the user normally will input an integer, use the first form. It is easier (and faster) to ask for forgiveness rather than for permission in that case.
Solution 2:
if you want to check what it is:
>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False
if you want to get ints from raw_input
>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
except: pass
>>>isinstance(x,int)
True
Solution 3:
The isdigit
method of the str
type returns True
iff the given string is nothing but one or more digits. If it's not, you know the string should be treated as just a string.
Solution 4:
Depending on your definition of shortly, you could use one of the following options:
try: int(your_input); except ValueError: # ...
your_input.isdigit()
- use a regex
- use
parse
which is kind of the opposite offormat
Solution 5:
Don't check. Go ahead and assume that it is the right input, and catch an exception if it isn't.
intresult = None
while intresult is None:
input = raw_input()
try: intresult = int(input)
except ValueError: pass