我正在使用Python 3.0。我试图让用户输入字符串' Small' Medium' Medium'或者'大'如果没有输入任何错误,则引发错误,然后再次请求输入。
while True:
try:
car_type = str(input('The car type: '))
except ValueError:
print('Car type must be a word.')
else:
break
为什么这不起作用?即使输入了一个数字,程序也会继续,并在结束时出现错误。
答案 0 :(得分:1)
input
始终返回str
,因此str(input())
永远不会引发ValueError
。
你将字符串与一个单词混淆。字符串只是一系列字符。例如,"123hj -fs9f032@RE#@FHE8"
是完全有效的字符序列,因此是完全有效的字符串。然而,这显然不是一个词。
现在,如果用户键入“1234”,Python将不会试图为您考虑并将其转换为整数,它只是一系列字符 - “1”后跟“2”后跟一个“3”,最后是“4”。
您必须定义符合条件的字符,然后检查输入的字符串是否符合您的定义。
例如:
options = ["Small", "Medium", "Large"]
while True:
car_type = input("The car type: ")
if car_type in options: break
print("The car type must be one of " + ", ".join(options) + ".")
答案 1 :(得分:1)
您可以按照以下步骤操作:
valid_options = ['Small', 'Medium' , 'Large' ]
while True:
car_type = input('The car type: ') # input is already str. Any value entered is a string. So no error is going to be raised.
if car_type in valid_options:
break
else:
print('Not a valid option. Valid options are: ', ",".join(valid_options))
print("Thank you. You've chosen: ", car_type)
此处无需任何尝试和错误。