首页 > 解决方案 > Jupyter:即使前一个单元失败,也可以运行下一个单元

问题描述

如果长时间运行的单元格失败,我想发送警报,但我不想尝试/除了因为那样我会在查看错误时发送不必要的消息。有没有办法做到这一点?

所需的工作流程:

1) 运行status=train()单元

2) 在前 15 秒内看不到错误

3) 执行下一个send_alert('done or error')将执行的单元格,而不管单元格 1 的结果如何。

4)去做别的事

这是一个单细胞解决方案,每次编码都很烦人:

try:
    start = time.time()
    train(...)
except Exception as e:
    pass
end = time.time()
if end - start > 60: send_alert('done')

标签: jupyter-notebookjupyteralerts

解决方案


这是一个解决方案,具有非常小但可扩展的自定义 iPython 魔术。

你可以把它保存在一个名为magics.py某处的文件中,或者有一个 pip 可安装的包。我使用了 pip 可安装的东西:

.
├── magics
│   ├── __init__.py
│   └── executor.py
└── setup.py
# magics/executor.py

import time
from IPython.core.magic import Magics, magics_class, cell_magic

@magics_class
class Exceptor(Magics):

    @cell_magic
    def exceptor(self, line, cell):
        timeout = 2
        try:
            start = time.time()
            self.shell.ex(cell)
        except:
            if time.time() - start > timeout:
                print("Slow fail!")
        else:
            if time.time() - start > timeout:
                print("done")
# magics/__init__.py

from .exceptor import Exceptor

def load_ipython_extension(ipython):
    ipython.register_magics(Exceptor)

这是一个使用它的例子。请注意,它%load_ext magics采用包的名称,然后为您提供名为 的单元格魔法%exceptor

在此处输入图像描述


推荐阅读