それを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")
編集:user2678074は、無限ループに陥る可能性があるため、デバッグが困難になる可能性があるという有効なポイントを示しています。
これを解決するために2つの提案をします。最初に、定義された再試行回数でforループを使用します。次に、上記を関数に配置します。これにより、アプリケーションロジックの残りの部分から分離され、エラーがその関数のスコープ内で分離されます。
def safeIntegerInput( num_retries = 3 ):
for attempt_no in range(num_retries):
try:
return int(input("Importance:\n\t1: High\n\t2: Normal\n\t3: Low"))
except ValueError as error:
if attempt_no < (num_retries - 1):
print("Error: Invalid number")
else:
raise error
これが適切な場所にあると、関数呼び出しの外部で試行/除外を行うことができ、再試行の最大数を超えた場合にのみ実行されます。