我正在尝试验证进入列表的输入。输入必须是整数。如果我输入一个整数或一个字母,我怎么工作。但如果我输入'qw'这样的程序,程序会崩溃。我该怎么做才能更好地验证输入?这是我的代码:
def getPints(pints):
counter = 0
while counter < 7:
pints[counter] = raw_input("Enter the number of pints donated: ")
check = isinstance(pints[counter], int)
while check == False:
print "Please enter an integer!"
pints[counter] = input("Enter the number of pints donated: ")
counter = counter + 1
答案 0 :(得分:0)
如上所述,check
将始终评估为False
,因为raw_input()
仅返回字符串,而不是整数。然后,您将陷入无限while
循环,因为您不会在其中更新check
。
使用字符串isdigit()
方法而不是isinstance
。
check = pints[counter].isdigit()
您还需要在循环内重新评估check
。但实际上,您根本不需要check
。
pints[counter] = raw_input("Enter the number of pints donated: ")
while not pints[counter].isdigit():
print "Please enter an integer!"
pints[counter] = raw_input("Enter the number of pints donated: ")
我怀疑你一旦有了合适的输入,你也想把pints[counter]
转换成一个int。
您正在使用LBYL方法(Look Before You Leap)。您还可以使用EAFP(更容易请求宽恕而不是权限)方法,只需尝试将输入转换为int并在输入错误时捕获异常:
while True:
try:
pints[counter] = int(raw_input("Enter the number of pints donated: "))
break
except ValueError:
print "Please enter an integer!"