2013-03-05 13 views
6

Ich habe einen Versuch-außer-Block in Python 3.3, und ich möchte es auf unbestimmte Zeit laufen.Wie wiederhole ich try-except Block

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> ") 

Derzeit wenn ein Benutzer eine nicht-ganze Zahl eingeben, so wäre es wie geplant funktionieren, aber wenn sie es wieder betreten, wäre es einfach wieder und Valueerror Absturz zu erhöhen.

Was ist der beste Weg, um dies zu beheben?

Antwort

12

Setzen Sie es in eine While-Schleife und brechen Sie aus, wenn Sie die erwarteten Eingaben erhalten haben. Es ist wahrscheinlich am besten, den gesamten Code abhängig von imp in der try wie unten zu halten, oder einen Standardwert dafür zu setzen, um NameError 's weiter unten zu verhindern.

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> " 

Ausgang:

[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]:~$ 
Verwandte Themen