当Jupyter笔记本电脑发生故障时播放声音

时间:2016-11-21 14:23:40

标签: ipython ipython-notebook jupyter-notebook

每当Jupyter笔记本电脑发出错误时发出声音的任何技巧

我检查了this question,我目前正在使用cellbell,如下所示:

import cellbell

# line magic
%ding my_long_function()

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

我想我需要的东西就像“错误勾”,类似于savehook ......

1 个答案:

答案 0 :(得分:4)

没有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))

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

get_ipython().set_custom_exc((ZeroDivisionError,), play_sound)

测试它:

1/0

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

ZeroDivisionError: division by zero

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!')

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

get_ipython().set_custom_exc((Exception,), play_sound)

试验:

1/0

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

ZeroDivisionError: division by zero

ding worked!

在jupyter notebook 4.2.3上测试