【问题标题】:Interrupt a loop that has a Try-Catch Block in IPython在 IPython 中中断具有 Try-Catch 块的循环
【发布时间】:2020-08-29 15:29:31
【问题描述】:

如果我有一个带有 try-catch 块的 for 循环,并且我中断了内核,则循环将转到错误块并简单地进行下一次迭代。我想完全停止循环,有没有办法做到这一点?目前,如果我想停止循环,我将不得不杀死内核,这意味着再次加载模型等,这需要时间。

示例:如果我打错了,我想知道是否有办法中断整个 for 循环,而不是只进行一次迭代。

import time
for i in range(100):
    try:
        time.sleep(5)
        print(i)
    except:
        print('err')

【问题讨论】:

  • 一般来说,非常不鼓励使用裸异常。如果要捕获所有非退出异常,请使用 except Exception。更好的是,相应地处理每个特定的异常。例如,如果您想使用 Ctrl+C 退出,请使用except KeyboardInterrupt...更多信息可以在this question的答案中找到

标签: jupyter-notebook ipython jupyter-lab


【解决方案1】:

只需在 try/catch 中捕获键盘中断即可。

for i in range(100):
    try:
        time.sleep(5)
        print(i)

    except KeyboardInterrupt:
       print ('KeyboardInterrupt exception is caught')
       raise # if you want everithings to stop now
       #break # if you want only to go out of the loop
    else:
       print('unexpected err')

更多信息:https://www.delftstack.com/howto/python/keyboard-interrupt-python/

【讨论】:

    【解决方案2】:

    你可以break跳出循环:

    for i in range(100):
        try:
            time.sleep(5)
            print(i)
        except:
            print('err')
            break
    

    【讨论】:

    • 感谢您的建议,这可以工作!但是当我在大多数情况下运行它时,我希望它进入错误块并保留错误日志并移动到下一次迭代。但是有好几次,我意识到我打错了,所以,在这种情况下,我需要完全停止循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多