如果输入没有生成错误但不是我想要的输入,如何重新运行try块?

时间:2018-06-17 05:54:43

标签: python python-3.x

我只想要输入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()

2 个答案:

答案 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块。正如奥斯丁建议的那样,这里没有必要。