2013-03-05 22 views
6

Python 3.3'te bir try-except bloğum var ve süresiz olarak çalışmasını istiyorum. Bir kullanıcı, bu planlandığı gibi çalışacak olmayan bir tamsayı girin olsaydı onlar tekrar girin olsaydıTry-except bloğu tekrarı nasıl yapılır

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

Fakat şu an için, sadece tekrar ValueError yükseltmek ve çökme olur.

Bunu düzeltmenin en iyi yolu nedir?

cevap

12

Bir süre döngüsünün içine koyun ve beklediğiniz girişi aldığınızda ayrılın. imp'daki tüm kodları try'a bağlı olarak aşağıdaki gibi tutmanız veya NameError'un daha da aşağıya inmesini önlemek için varsayılan bir değer belirlemeniz en iyisidir.

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

Çıktı:

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