所以我有以下代码来捕获用户输入错误:
while True:
try:
number1 = int(input('Number1: '))
assert 0 < number1 < 10
number2 = int(input('Number2: '))
assert 0 < number2 < 10
number3 = int(input('Number3: '))
assert 0 < number3 < 10
number4 = int(input('Number4: '))
assert 0 < number4 < 10
except (ValueError, AssertionError):
print("Not valid")
else:
break
我的问题是,如果我的用户在输入数字4时输入错误,则循环将重置,并且他们必须再次输入前三个数字。相反,我想找到一种方法来返回他们刚才输入错误的数字(最好不要对每个单独的输入使用while循环)。
谢谢!
答案 0 :(得分:3)
只需提取要求输入数字的内容即可
def input_number(message):
while True:
try:
number = int(input(message))
assert 0 < number < 10
except (ValueError, AssertionError):
print("Not valid")
else:
return number
number1 = input_number('Number1: ')
number2 = input_number('Number2: ')
number3 = input_number('Number3: ')
number4 = input_number('Number4: ')
关于assert
的旁注:最佳实践是避免在这种情况下使用assert
,因为如果以优化模式运行python,那么它们就会被剥夺,事实是,优化模式是通常不使用。
答案 1 :(得分:1)
如果要对每个输入进行单独处理,则需要以这种方式编写代码。您将此写为全有或全无。最明显的方法是为每个输入使用单独的块。更为实用的方法是遍历您的输入并重复使用单个try-except
。
num_list = []
for i in range(4):
while True:
try:
num = int(input('Number ' + str(i) + ' : '))
assert 0 < number1 < 10
except (ValueError, AssertionError):
print("Not valid")
num_list.append(num)