[英]How to repeat try-except block
我在 Python 3.3 中有一个 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 并崩溃。
解决此问题的最佳方法是什么?
把它放在一个 while 循环中,当你得到你期望的输入时就跳出来。 最好在try
保持所有依赖于imp
代码,或者为其设置默认值以防止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 ,并且只有在超过最大重试次数时才会通过。
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> "
输出:
rob@rivertam:~$ 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
rob@rivertam:~$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.