关于python:如何在打印前检查输入是否有效?

how to check if an input is valid before printing?

本问题已经有最佳答案,请猛点这里访问。

假设我希望用户输入一个介于1和50之间的数字,那么我会这样做:

1
num = input("Choose a number between 1 and 50:")

但如果用户输入的数字不在1到50之间,我希望它打印:

Choose a number between 1 and 50: invalid number

我该怎么做?


您需要将输入设置为整数,否则它将是一个字符串:

1
num = int(input("Choose a number between 1 and 50:"))

检查num设置为:

1
2
3
4
if 1 < num < 50:
    print(1)
else:
    print("invalid number")


1
2
3
4
5
6
7
8
num = input("Choose a number between 1 and 50:")

try:
    num = int(num) #Check if user input can be translated to integer. Otherwise this line will raise ValueError
    if not 1 <= num <= 50:
        print('Choose a number between 1 and 50: invalid number')
except ValueError:
    print('Choose a number between 1 and 50: invalid number')


我可以这样做:

1
2
3
4
5
6
7
8
9
10
validResponse = False
while(not validResponse):
    try:
        num = int(input("Choose a number between 1 and 50:"))
        if(1 <= num <= 50):
            validResponse = True
        else:
            print("Invalid number.")
    except ValueError:
        print("Invalid number.")

这是,如果您想提示他们直到输入正确的数字。否则,可以放弃while循环和validResponse变量。

Try将运行该语句,直到遇到错误为止。如果错误是特定的数字不能作为整数进行插入,那么它将引发一个valueerror异常,except语句将告诉程序在这种情况下应该做什么。在这种情况下,任何其他形式的错误仍然会按照您的需要结束程序,因为这里唯一可接受的错误类型是valueerror。但是,在try语句之后可以有多个except语句来处理不同的错误。


除了上述答案之外,您还可以使用断言。在调试和测试时,您可能会更多地使用这些。如果失败,它将抛出一个AssertionError

1
2
3
4
5
6
7
num = input('Choose a number between 1 and 50') # try entering something that isn't an int

assert type(num) == int
assert num >= 1
assert num <= 50

print(num)

您可以使用if语句,但您需要先将输入分配给一个变量,然后将该变量包含在条件中。否则,您没有任何要评估的内容。

1
2
3
4
5
num = input('Choose a number between 1 and 50')

if type(num) == int: # if the input isn't an int, it won't print
    if num >= 1 and num <= 50:
        print(num)

默认情况下,提供的输入将是字符串。您可以在输入上调用内置函数int(),并将其强制转换为类型int。如果用户输入的东西不是int类型,它将抛出ValueError

1
num = int(input('Choose a number between 1 and 50'))

您还可以实现错误处理(如Moonsik Park和Ethan Thomas的答案所示)。