添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

0 人关注

所以我有以下代码来捕捉用户的输入错误。

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

提前感谢!

python
try-except
mailrenegade
mailrenegade
发布于 2019-10-16
2 个回答
bug
bug
发布于 2019-10-16
已采纳
0 人赞同

只需提取那块问号。

def input_number(message):
  while True:
      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,那么它们会被剥离,事实是,优化模式通常不会被使用。

Prune
Prune
发布于 2019-10-16
0 人赞同

如果你想对每个输入进行单独处理,那么你就需要这样写你的代码。 你把它写成一个全有或全无的块。 明显的方法是为每个输入设置单独的块。 更有用的方法是循环处理你的输入并重新使用一个 try-except

num_list = []
for i in range(4):
    while True:
            num = int(input('Number ' + str(i) + ' : '))
            assert  0 < number1 < 10
        except (ValueError, AssertionError):
            print("Not valid")