我只想要输入1000到1700.如果输入不是整数,则except块能够捕获错误并重新运行try块,但如果输入是整数则不能,但不是我想要的。如何在用户输入正确的整数之前重新运行try块?提前谢谢!
def gettriptime():
while True:
try:
ch=int(input("""
Trip Times:
1000
1100
1200
1300
1400
1500
1600
1700
Please enter trip time: """))
if (ch==1000) or (ch==1100) or (ch==1200) or (ch==1300) or (ch==1400) or (ch==1500) or (ch==1600):
return ch
else:
print("\nInvalid trip time.")
except ValueError:
print("\nPlease enter a valid option. ")
else:
break
gettriptime()
答案 0 :(得分:4)
不需要try-except
块。检查用户输入是否为列表中的数字,如果是,则退出无限循环:
def gettriptime():
lst = [1000, 1100, 1200, 1300 , 1400, 1500, 1600, 1700]
while True:
ch = int(input("""
Trip Times:
1000
1100
1200
1300
1400
1500
1600
1700
Please enter trip time: """))
if ch in lst:
return ch
ch = gettriptime()
甚至更好(没有创建自己的列表)利用range
:
def gettriptime():
while True:
ch = int(input("""
Trip Times:
1000
1100
1200
1300
1400
1500
1600
1700
Please enter trip time: """))
if ch in range(1000, 1800, 100):
return ch
ch = gettriptime()
另外,您可能会注意到将返回值传递给变量,否则会浪费掉。 gettriptime()
- > ch = gettriptime()
答案 1 :(得分:1)
只需删除额外的else
块即可。当用户输入错误的输入时,您的上一个else
块将被执行并打破循环。你只需要删除它。
def gettriptime():
while True:
try:
ch=int(input("""
Trip Times:
1000
1100
1200
1300
1400
1500
1600
1700
Please enter trip time: """))
if (ch==1000) or (ch==1100) or (ch==1200) or (ch==1300) or (ch==1400) or (ch==1500) or (ch==1600):
return ch
else:
print("\nInvalid trip time.")
except ValueError:
print("\nPlease enter a valid option. ")
gettriptime()
注意:您可以删除try/except
块。正如奥斯丁建议的那样,这里没有必要。