2013-03-05 56 views
6

我在Python 3.3中有一个try-except块,我希望它无限期地运行。如何重复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]:~$