当 Jupyter 笔记本单元出现故障时播放声音
Posted
技术标签:
【中文标题】当 Jupyter 笔记本单元出现故障时播放声音【英文标题】:play sound when Jupyter notebook cell fails 【发布时间】:2016-11-21 14:23:40 【问题描述】:有什么技巧可以在 Jupyter 笔记本单元抛出错误时播放声音?
我检查了this question,我目前正在像这样使用cellbell:
import cellbell
# line magic
%ding my_long_function()
但我不知道在我的一个单元格抛出错误时让它运行(除了将每个单元格包装在 try/catch 子句中)。
我想我需要的是类似“错误钩子”的东西,类似于savehook...
【问题讨论】:
【参考方案1】:没有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 上测试
【讨论】:
以上是关于当 Jupyter 笔记本单元出现故障时播放声音的主要内容,如果未能解决你的问题,请参考以下文章
使用 IPython.display.audio 在 jupyter notebook 中播放音频在函数内使用时不起作用