2014-10-29 5 views
0
continue = True 
while continue: 
    try: 
     userInput = int(input("Please enter an integer: ")) 
    except ValueError: 
     print("Sorry, wrong value.") 
    else: 
     continue = False 

Для кода выше, как я могу поймать конкретный ValueError? Я имею в виду, что если пользователь вводит нецелое число, я бы распечатал "Sorry, that is not an integer.". Но если пользовательский ввод является пустым, я бы распечатал "Empty Input.".Специфические Попробуйте и за исключением

ответ

3

Переведите звонок на номер input за пределами блока try: и поместите в него только номер int. Это гарантирует, что userInput определено, что позволяет затем проверить его значение с помощью условного оператора:

keepgoing = True 
while keepgoing: 
    userInput = input("Please enter an integer: ") # Get the input. 
    try: 
     userInput = int(userInput) # Try to convert it into an integer. 
    except ValueError: 
     if userInput: # See if input is non-empty. 
      print("Sorry, that is not an integer.") 
     else: # If we get here, there was no input. 
      print("Empty input") 
    else: 
     keepgoing = False 
+0

Я удивлен, что это лучший способ сделайте это, как что-то вроде «KeyError», вы можете получить то, что вызвало его с помощью '' e.args' '(http://stackoverflow.com/questions/23139024/how-do-i-find-out-what- key-failed-in-python-keyerror/23139085 # 23139085), но это просто возвращает сообщение для этого. Странный. –

+0

Вы можете получить входное значение из сообщения, содержащегося в 'e.args', но это будет более активно, чем мое решение. Я целенаправленно сохранял код простым, чтобы не превышать уровень опыта OP. – iCodez

+0

Я, вероятно, сделаю это таким образом, несмотря на то, что иначе он был бы слишком длинным. Тем не менее, я удивлен тем, что аргументы, переданные в «BaseException», не могут быть доступны одинаково. –

2

Возможно, что-то вроде этого:

keepgoing = True 
while keepgoing: 
    try: 
     userInput = input("Please enter an integer: ") 
     if userInput == "": 
      print("Empty value") 
      raise ValueError 
     else: 
      userInput = int(userInput) 
    except ValueError: 
     print("Sorry, wrong value.") 
    else: 
     keepgoing = False 
+0

в вашем случае пустой вход позволит выйти из цикла. – njzk2

+0

Я исправил его ..... – jgritty

+0

@jgritty. Пропустил это ... спасибо! – micebrain

Смежные вопросы