Как повторно запросить пользовательский ввод, если пользователь ввел нецелое число в python

#python #python-2.7 #validation #while-loop #integer

#python #python-2.7 #проверка #цикл while #целое

Вопрос:

в части одной программы я хотел убедиться, что пользовательский ввод только поэтому я использовал:

 num=int(raw_input())
while type(num)!= int:
   num=int(raw_input('You must enter number only'))
print num 
  

Но, делая это, если пользователь ввел некоторые нецелые значения, такие как строки или что-либо еще, весь код отображается с ошибкой.
итак, как я могу заставить пользователя повторно вводить значение, пока они не введут целое число.

вывод был таким:

 input your number
hdhe
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-4b5e9a275ca4> in <module>()
      1 print'input your number'
----> 2 num=int(raw_input())
      3 while type(num)!= int:
      4     num=int(raw_input('You must enter number only'))
      5 print num

ValueError: invalid literal for int() with base 10: 'hdhe'
  

Комментарии:

1. Просто удалите int() при определении num : num = raw_input()

Ответ №1:

 while True:
    try:
        n = int(input('input your number : '))
        break
    except ValueError:
        print('You entered a non integer value, try again.')
        continue

print('yay!! you gave the correct value as int')
  

Теперь вы можете вносить любые косметические изменения по своему усмотрению.

Удачного кодирования.

Ответ №2:

Ваш num = int(raw_input()) уже гарантировал, что это должно быть int и вызовет ValueError, если не int. Таким образом, ваш цикл while никогда не будет выполнен, потому что он никогда не получит переменную, отличную от int, для num . Вместо этого удалите int () из переменной num, и все готово!

Ответ №3:

Вы можете использовать isinstance , чтобы проверить, является ли ввод int или нет.

если ввод не является int циклическим, пока пользователь не введет int .

Например:

 num = input("Enter an integer:")
if not isinstance(num, int):
    while not isinstance(num, int):
        try:
            num = int(input('You must enter integer only'))
        except ValueError as ve:
            pass
  

Выход:

 Enter an integer:e
You must enter integer onlyr
You must enter integer onlye
You must enter integer only4

Process finished with exit code 0
  

Ответ №4:

Вы передаете ввод от пользователя непосредственно в int в строке 2. Если это не целое число, генерируется исключение ValueError. Мы можем изменить вашу реализацию и перехватить исключение, когда это произойдет, только выйдя из цикла, когда исключения не возникает, а num является целым числом.

 while True:
    num=raw_input()
    try:
        num=int(num)
        break
    except ValueError:
        print "Input is not an integer!"
print num
  

Вы также могли бы использовать регулярное выражение для проверки, является ли входное значение целым числом, или какую-либо другую библиотечную функцию, которая проверяет, является ли строка из raw_input() целым числом.