如何停止 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