2016-11-21 4 views
1

Любой трюк до играет звук всякий раз, когда блокнот Jupyter выдает ошибку?Воспроизведение звука при сбое ноутбука Jupyter

Я проверил this question, и я в настоящее время использую cellbell так:

import cellbell 

# line magic 
%ding my_long_function() 

, но я не знаю, чтобы запустить его всякий раз, когда один из моих клеток выдает ошибку (за исключением упаковки каждую клетку в попытке/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!') 

сброса пользовательских exeception, обратите внимание, вы можете использовать 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 ноутбук 4.2.3

Смежные вопросы