简体   繁体   English

如何在while循环中使用try-except命令请求用户输入

[英]How to use the try-except command in a while loop asking for user input

I'm a Python beginner and tried to use try and except for the first time. 我是一个Python初学者,并尝试使用tryexcept第一次。 I'm asking the user for an integer value but instead of ending the program if the user enters for example a string, I would like to ask the user again and again until an integer is given. 我要求用户输入一个整数值,但是如果用户输入例如一个字符串,而不是结束程序,我想一次又一次地询问用户,直到给出一个整数。

At the moment the user is only asked once to give another answer if he gives a string but if he gives a wrong input again, the program stops. 此时,如果用户只给出了一个字符串,但只要他再次给出错误的输入,则该用户只被要求一次给出另一个答案,程序停止。

Below an example of what I mean. 下面是我的意思的一个例子。

I had a look through similar questions on Stackoverflow but I couldn't fix it with any of the suggestions. 我在Stackoverflow上查看了类似的问题,但我无法解决任何建议。

travel_score = 0

while True:
    try:
        travel_score = int(input("How many times per year do you travel? Please give an integer number"))
    except ValueError:
        travel_score = int(input("This was not a valid input please try again"))


print ("User travels per year:", travel_score)

The problem is that once you thrown the ValueError exception, it is caught in the except block, but then if it is thrown again there are no more except s to catch these new errors. 问题是,一旦你抛出了ValueError异常,就会在except块中捕获它,但是如果再次抛出它, except s except没有更多的东西可以捕获这些新的错误。 The solution is to convert the answer only in the try block, not immediately after the user input is given. 解决方案是仅在try块中转换答案,而不是在给出用户输入后立即转换答案。

Try this: 尝试这个:

travel_score = 0
is_int = False
answer = input("How many times per year do you travel? Please give an integer number: ")

while not is_int:    
    try:
        answer = int(answer)
        is_int = True
        travel_score = answer
    except ValueError:
        answer = input("This was not a valid input please try again: ")


print ("User travels per year:", travel_score)

The problem is that there is no exception handling for your second input. 问题是您的第二个输入没有异常处理。

travel_score = 0

while True:
    try:
        travel_score = int(input("How many times per year do you travel? Please give an integer number"))
    except ValueError:
        # if an exception raised here it propagates
        travel_score = int(input("This was not a valid input please try again"))


print ("User travels per year:", travel_score)

The best way to handle this is to put an informative message back to the user if their input is invalid and allow the loop to return to the beginning and re-prompt that way: 处理此问题的最佳方法是,如果输入无效,则将信息性消息发回给用户,并允许循环返回到开头并以此方式重新提示:

# there is no need to instantiate the travel_score variable
while True:
    try:
        travel_score = int(input("How many times per year do you travel? Please give an integer number"))
    except ValueError:
        print("This was not a valid input please try again")
    else:
        break  # <-- if the user inputs a valid score, this will break the input loop

print ("User travels per year:", travel_score)

@Luca Bezerras answer is good, but you can get it a bit more compact: @Luca Bezerras答案很好,但你可以把它变得更紧凑:

travel_score = input("How many times per year do you travel? Please give an integer number: ")

while type(travel_score) is not int:    
    try:
        travel_score = int(travel_score)
    except ValueError:
        travel_score = input("This was not a valid input please try again: ")


print ("User travels per year:", travel_score)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM