2013-11-13 3 views
0

Сейчас у меня этот код:, а х ValueError:

yon = raw_input("were you running in km y or n?: ") 
if yon is "y": 
    kilnumber = raw_input("how many kilometers?: ") 
    milnumber = 0 
    try: 
     float(kilnumber) 
    except: 
     print "You must enter a number" 
     exit() 

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

yon = raw_input("were you running in km y or n?: ") 
if yon is 'y': 
    kilnumber = raw_input("how many kilometers?: ") 
    milnumber = 0 
    while float(kilnumber) is ValueError: 
     print "You must enter a number" 
     kilnumber = raw_input("how many kilometers?: ") 

Этот код не работает, поскольку он отправляет сообщение об ошибке перед вычислением цикла while. Решение?

+2

Не используйте 'is' для сравнения значений, используйте' == '. Измените условие на 'if yon ==" y ":' – Tim

ответ

0

Как вы думаете, что это значит?

while float(kilnumber) is ValueError: 

float(kilnumber) никогда не будет ValueError, он может бросить один. Поэтому вы должны использовать try/catch. Вы можете поместить его в цикл while, который проверяет переменную, указывающую правильные данные.

5

float(kilnumber) никогда не будет оцениваться до ValueError. Скорее, он может выбросить ValueError. Вы должны поймать его:

while True: 
    try: 
     float(kilnumber) 
    except ValueError: 
     # Not a valid number 
     print "You must enter a number" 
     kilnumber = raw_input("how many kilometers?: ") 
    else: 
     # No error; stop the loop 
     break 

Смотрите tutorial больше исключений и ошибок.

+0

, когда я пытаюсь запустить его, консольные отпечатки: файл "test.py", строка 6 else: SyntaxError: недопустимый синтаксис – Gingynator

+0

@Gingynator: Это потому, что я испортил порядок статей. Он должен быть исправлен. – user2357112

+0

Я следил за вашей ссылкой на этот учебник, и на самом деле это был точный пример того, о чем мы говорили :). для упрощения вам не нужен другой, вы можете поставить перерыв в try: after float (kilnumber), и он делает то же самое. Спасибо за помощь! – Gingynator

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