如何停止try / except循环回到第一个输入?

时间:2019-10-15 21:45:39

标签: python try-except

所以我有以下代码来捕获用户输入错误:

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循环)。

谢谢!

2 个答案:

答案 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)

另请参见loop until valid response