Как проверить, является ли переменная целой или строкой?
У меня есть приложение, имеющее пару команд.
Когда вы вводите определенную команду, вам нужно ввести дополнительную информацию о чем-то/кого-то.
Теперь информация должна быть строго целым числом или строкой, в зависимости от ситуации.
Однако, что бы вы ни вводили в Python с использованием raw_input(), на самом деле это строка, независимо от того, что более конкретно, как бы я мог быстро и без попытки... кроме того, если переменная состоит из цифр или символов?
Ответы
Ответ 1
По-моему, у вас есть два варианта:
-
Просто попробуйте преобразовать его в int
, но поймайте исключение:
try:
value = int(value)
except ValueError:
pass # it was a string, not an int.
Это подход Ask Forgiveness.
-
Явно проверяю, есть ли в строке только цифры:
value.isdigit()
str.isdigit()
возвращает True
только в том случае, если все символы в строке являются цифрами (0
- 9
).
эквивалент типа unicode
/Python 3 str
unicode.isdecimal()
/str.isdecimal()
; только десятичные числа Unicode могут быть преобразованы в целые числа, так как не все цифры имеют фактическое целочисленное значение (U + 00B2 SUPERSCRIPT 2 - это цифра, но не десятичная, например).
Это часто называют подходом к разрешению запроса или просмотром перед вами.
Последний не будет обнаруживать все допустимые значения int()
, так как пробелы и +
и -
также допускаются в значениях int()
. Первая форма с радостью примет ' +10 '
как число, последнее не будет.
Если вы ожидаете, что пользователь обычно вводит целое число, используйте первую форму. Легче (и быстрее) попросить прощения, а не разрешения в этом случае.
Ответ 2
если вы хотите проверить, что это такое:
>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False
если вы хотите получить ints из raw_input
>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
except: pass
>>>isinstance(x,int)
True
Ответ 3
Метод t20 > типа str
возвращает True
, если данная строка представляет собой не что иное, как одну или несколько цифр. Если это не так, вы знаете, что строка должна рассматриваться как строка.
Ответ 4
Не проверять. Идем дальше и предположим, что это правильный вход, и поймаем исключение, если оно не является.
intresult = None
while intresult is None:
input = raw_input()
try: intresult = int(input)
except ValueError: pass
Ответ 5
В зависимости от вашего определения в ближайшее время вы можете использовать один из следующих вариантов:
-
try: int(your_input); except ValueError: # ...
-
your_input.isdigit()
- используйте regex
- используйте
parse
, который является видом противоположности format