Jupyter notebook 单元出现故障时播放声音

Ren*_*aud 7 ipython ipython-notebook jupyter-notebook

每当 Jupyter 笔记本单元出现错误时播放声音的任何技巧?

我检查了这个问题,我目前正在使用这样的cellbell

import cellbell

# line magic
%ding my_long_function()
Run Code Online (Sandbox Code Playgroud)

但我不知道在我的一个单元格抛出错误时让它运行(除了将每个单元格包装在 try/catch 子句中)。

我想我需要的是类似于“错误钩子”的东西,类似于保存钩子......

Kev*_*vin 6

没有cellbell(更通用的答案)

在笔记本中定义一个函数。**注意:Audio必须传递给display

from IPython.display import Audio, display

def play_sound(self, etype, value, tb, tb_offset=None):
    self.showtraceback((etype, value, tb), tb_offset=tb_offset)
    display(Audio(url='http://www.wav-sounds.com/movie/austinpowers.wav', autoplay=True))
Run Code Online (Sandbox Code Playgroud)

设置自定义异常处理程序,您可以在元组中列出异常类型。

get_ipython().set_custom_exc((ZeroDivisionError,), play_sound)
Run Code Online (Sandbox Code Playgroud)

测试一下:

1/0

---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-21-05c9758a9c21> in <module>()
----> 1 1/0

ZeroDivisionError: division by zero
Run Code Online (Sandbox Code Playgroud)

cellbell:不同之处在于使用%ding魔法。

import cellbell

def play_sound(self, etype, value, tb, tb_offset=None):
    %ding
    self.showtraceback((etype, value, tb), tb_offset=tb_offset)
    print('ding worked!')
Run Code Online (Sandbox Code Playgroud)

重置自定义异常,请注意,您可以Exception在出现任何错误时播放声音:

get_ipython().set_custom_exc((Exception,), play_sound)
Run Code Online (Sandbox Code Playgroud)

测试:

1/0

---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-4-05c9758a9c21> in <module>()
----> 1 1/0

ZeroDivisionError: division by zero

ding worked!
Run Code Online (Sandbox Code Playgroud)

在 jupyter notebook 4.2.3 上测试