For example, I want to check a string and if it is not convertible to integer(with int()
), how can I detect that?
Asked
Active
Viewed 6.3k times
45

Karl Knechtel
- 62,466
- 11
- 102
- 153

Figen Güngör
- 12,169
- 14
- 66
- 108
-
There is already a solution here http://stackoverflow.com/questions/354038/how-do-i-check-if-a-string-is-a-number-in-python – ronak Sep 17 '12 at 19:44
-
For clarity, should '-99' be allowed? What about '+123'? Or " 1729 " (integer with leading and trailing spaces). '0x123'? – Mark Dickinson Sep 17 '12 at 19:52
-
@MarkDickinson -- why wouldn't `'-99'` be allowed? – mgilson Sep 17 '12 at 19:57
-
1@mgilson: No idea---I can't guess what the OP's usecase is. But it's an obvious example that isn't served so well by the 'isdigit' answer. – Mark Dickinson Sep 17 '12 at 19:59
-
See also: https://stackoverflow.com/questions/379906/python-parse-string-to-float-or-int – Karl Knechtel Jul 21 '22 at 23:21
2 Answers
49
Use the .isdigit()
method:
>>> '123'.isdigit()
True
>>> '1a23'.isdigit()
False
Quoting the documentation:
Return true if all characters in the string are digits and there is at least one character, false otherwise.
For unicode
strings or Python 3 strings, you'll need to use a more precise definition and use the unicode.isdecimal()
/ str.isdecimal()
instead; not all Unicode digits are interpretable as decimal numbers. U+00B2 SUPERSCRIPT 2 is a digit, but not a decimal, for example.

Martijn Pieters
- 1,048,767
- 296
- 4,058
- 3,343
-
2
-
5I didn't downvote, but `" 1234".isdigit()` will return `False` even though `int` will happily ignore the space in the front. – mgilson Sep 17 '12 at 19:49
-
2@user1655481: that's not a number either, it's a python hex literal. `int('0x12')` throws ValueError unless you specify a base. – Martijn Pieters Sep 17 '12 at 19:51
-
@mgilson: that's kind of the point of the function. It depends on your usecases as to what you need, if `.strip()` is needed, etc. – Martijn Pieters Sep 17 '12 at 19:52
33
You can always try
it:
try:
a = int(yourstring)
except ValueError:
print "can't convert"
Note that this method outshines isdigit
if you want to know if you can convert a string to a floating point number using float

mgilson
- 300,191
- 65
- 633
- 696