如何停止 try/except 循环回到第一个输入?
How to stop try/except looping back to first input?
所以我有以下代码来捕获用户输入错误:
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 时出错,则循环会重置,他们必须再次输入前 3 个数字。相反,我想找到一种方法 return 到他们刚刚输入错误的数字(最好不要对每个单独的输入使用 while 循环)。
提前致谢!
只需提取要编号的片段:
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 在优化模式下,那么它们是剥离,事实是通常不会使用优化模式。
如果您希望对每个输入进行单独处理,则需要以这种方式编写代码。你把它写成一个全有或全无的块。显而易见的方法是为每个输入设置单独的块。更有用的方法是循环输入并重复使用单个 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)
另见 loop until valid response
所以我有以下代码来捕获用户输入错误:
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 时出错,则循环会重置,他们必须再次输入前 3 个数字。相反,我想找到一种方法 return 到他们刚刚输入错误的数字(最好不要对每个单独的输入使用 while 循环)。
提前致谢!
只需提取要编号的片段:
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 在优化模式下,那么它们是剥离,事实是通常不会使用优化模式。
如果您希望对每个输入进行单独处理,则需要以这种方式编写代码。你把它写成一个全有或全无的块。显而易见的方法是为每个输入设置单独的块。更有用的方法是循环输入并重复使用单个 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)
另见 loop until valid response