2013-03-05 9 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ループの中に入れ、壊れます。おそらく、すべてのコードをtryimpに従属させるか、デフォルト値を設定して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]:~$ 
関連する問題