【问题标题】:While loop "continue" not working inside try, except, finally虽然循环“继续”在尝试中不起作用,但最终除外
【发布时间】:2021-09-20 15:01:41
【问题描述】:

尝试运行while 循环直到输入有效:

while True:
    try:
        print('open')    
        num = int(input("Enter number:"))
        print(num)

    except ValueError:
        print('Error:"Please enter number only"') 
        continue #this continue is not working, the loop runs and break at finally

    finally:
        print('close')
        break

如果输入了除数字以外的任何内容,则需要继续循环,但循环到达finallybreaks。

【问题讨论】:

标签: python python-3.x while-loop try-except continue


【解决方案1】:

您只需删除finally: 语句即可实现您想要的。

while True:
    try:
        print('open')    
        num = int(input("Enter number:"))
        print(num)
        break # stop the loop when int() returns a value

    except ValueError:
        print('Error:"Please enter number only"') 
        continue

验证 int() 后需要做的任何事情都应该在 try/except/finally 结构之外

【讨论】:

  • 您忘记了try 末尾的break。否则循环将无限运行。
  • 但我最终需要关闭一些东西
  • finally 将始终在tryexcept 之后执行(唯一不会执行的情况是如果您中断循环)。获得号码后,只需将break 移至该行即可。 (所以在这种情况下,```num = int(input("Enter number:"))````)
  • 这就是你在 try 中打破循环的原因:@sputnick567 注意到了!
  • try-block 中有一些没有经过测试的东西,这并不理想。请改用else。见my answer
【解决方案2】:

finally始终在 try-except 之后运行。你想要else只有在 try 块没有引发异常时才会运行

顺便说一下,尽量减少try-block中的代码,以避免误报。

while True:
    inp = input("Enter number: ")
    try:
        num = int(inp)
    except ValueError:
        print('Error: Please enter number only')
        continue
    else:
        print(num)
        break
    print('This will never print')  # Added just for demo

试运行:

Enter number: f
Error: Please enter number only
Enter number: 15
15

请注意,您的示例中实际上不需要continue,因此我在循环底部添加了一个演示print()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多