Как проверить, является ли необработанный ввод целым числом в python 2.7?

Есть ли метод, который я могу использовать, чтобы проверить, является ли raw_input целым числом?

Я нашел этот метод после исследования в Интернете:

print isinstance(raw_input("number: ")), int)

но когда я запускаю его и ввожу, например, 4, я получаю FALSE. Я новичок в python, буду признателен за любую помощь.


person Alejandro Veintimilla    schedule 18.10.2013    source источник


Ответы (4)


isinstance(raw_input("number: ")), int) всегда дает False, потому что raw_input в результате возвращает строковый объект.

Используйте try: int(...) ... except ValueError:

number = raw_input("number: ")
try:
    int(number)
except ValueError:
    print False
else:
    print True

или используйте str.isdigit:

print raw_input("number: ").isdigit()

ПРИМЕЧАНИЕ Второй вариант дает False вместо -4, поскольку содержит нецифровой символ. Используйте второй, если вам нужны только цифры.

ОБНОВЛЕНИЕ Как указал Дж. Ф. Себастьян, str.isdigit зависит от локали (Windows). Он может вернуть True, даже если int() вызовет ValueError для ввода.

>>> import locale
>>> locale.getpreferredencoding()
'cp1252'
>>> '\xb2'.isdigit()  # SUPERSCRIPT TWO
False
>>> locale.setlocale(locale.LC_ALL, 'Danish')
'Danish_Denmark.1252'
>>> '\xb2'.isdigit()
True
>>> int('\xb2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '\xb2'
person falsetru    schedule 18.10.2013
comment
Или, если они хотят превратить переменную в число, number = int(number) - person SethMMorton; 18.10.2013
comment
str.isdigit() может зависеть от локали (потому что Microsoft), т. е. он может вернуть True, даже int() вызовет ValueError для ввода. - person jfs; 19.10.2014
comment
@ J.F.Sebastian, raw_input() возвращает объект str, а не объект unicode. Поэтому я думаю, что str.isdigit будет работать так, как ожидалось. Не могли бы вы привести пример. - person falsetru; 19.10.2014
comment
str.isdigit(): Для 8-битные строки, этот метод зависит от локали.. - person jfs; 19.10.2014
comment
'\xb2'.isdigit() может быть истинным в Python 2, если локаль использует кодировку символов cp1252 (в Windows). - person jfs; 19.10.2014
comment
@ J.F.Sebastian, спасибо за информацию. Я пытаюсь воспроизвести его сам. Я обновлю ответ, как только воспроизведу его. - person falsetru; 19.10.2014
comment
@ J.F.Sebastian, я обновил ответ согласно тебе. Кстати, я не мог воспроизвести это. i.imgur.com/pHvgZOY.png . Не могли бы вы дать мне какую-нибудь подсказку? Я готов сменить язык/локаль и перезагрузиться ;) - person falsetru; 19.10.2014
comment
используйте локаль cp1252, а не cp1251. PYTHONIOENCODING не имеет отношения. - person jfs; 19.10.2014
comment
@ J.F.Sebastian, я смог воспроизвести это благодаря тебе. Приятно это знать. Возвращаясь к моему родному языку :) - person falsetru; 19.10.2014
comment
Вы проверили, что int('\xb2') вызывает ValueError в датском языке? - person jfs; 19.10.2014
comment
@ J.F.Sebastian, Да, я проверил: i.imgur.com/BglM8Ol.png . Я забыл вставить эту часть. Еще раз спасибо :) - person falsetru; 19.10.2014

Вы можете сделать это следующим образом:

try:
    val = int(raw_input("number: "))
except ValueError:
    # not an integer
person Dietrich Epp    schedule 18.10.2013

вот мое решение

`x =raw_input('Enter a number or a word: ')
y = x.isdigit()
if (y == False):
    for i in range(len(x)):
        print('I'),
else:
    for i in range(int(x)):
        print('I'),

`

person user5322265    schedule 12.09.2015
comment
Пожалуйста, рассмотрите возможность редактирования своего поста, чтобы объяснить, как это работает, поскольку ответы только на код не всегда дают понять ОП, как решить их проблему. - person SuperBiasedMan; 12.09.2015

Попробуйте этот метод .isdigit(), см. пример ниже.

user_input = raw_input()
if user_input.isdigit():
    print "That is a number."

else:
    print "That is not a number."

Если вам требуется, чтобы ввод оставался цифрой для дальнейшего использования, вы можете добавить что-то вроде:

new_variable = int(user_input)
person Elf Machine    schedule 02.08.2018