2013-03-05 2 views
6

У меня есть блок try-except в Python 3.3, и я хочу, чтобы он запускался бесконечно.Как повторить блок try-except

try: 
    imp = int(input("Importance:\n\t1: High\n\t2: Normal\n\t3: Low")) 
except ValueError: 
    imp = int(input("Please enter a number between 1 and 3:\n> ") 

В настоящее время, если пользователь вводит нецелом он будет работать, как и планировалось, однако, если они должны были войти в него снова, было бы просто поднять ValueError снова и аварии.

Каков наилучший способ исправить это?

ответ

12

Поместите его внутри цикла while и вырвайтесь, когда у вас есть вход, который вы ожидаете. Вероятно, лучше всего сохранить код, зависящий от imp, в try, как указано ниже, или установить для него значение по умолчанию для предотвращения дальнейшего уменьшения NameError.

while True: 
    try: 
    imp = int(input("Importance:\n\t1: High\n\t2: Normal\n\t3: Low")) 

    # ... Do stuff dependant on "imp" 

    break # Only triggered if input is valid... 
    except ValueError: 
    print("Error: Invalid number") 
6
prompt = "Importance:\n\t1: High\n\t2: Normal\n\t3: Low\n> " 
while True: 
    try: 
     imp = int(input(prompt)) 
     if imp < 1 or imp > 3: 
      raise ValueError 
     break 
    except ValueError: 
     prompt = "Please enter a number between 1 and 3:\n> " 

Выход:

[email protected]:~$ python3 test.py 
Importance: 
    1: High 
    2: Normal 
    3: Low 
> 67 
Please enter a number between 1 and 3: 
> test 
Please enter a number between 1 and 3: 
> 1 
[email protected]:~$ 
Смежные вопросы