把它放在一个 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 指出这可能会使调试变得困难,因为它可能会陷入无限循环。
我会提出两个建议来解决这个问题 - 首先使用具有定义重试次数的 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
有了这个,你可以在函数调用之外有一个 try/except ,只有当你超过最大重试次数时它才会通过。