Jupyter / Colab : Play sound with any error in any cell + Play sound after completing long running cells

隐身守侯 提交于 2020-07-03 09:35:20

问题


Sometimes an error happens but I don't notice because I may be running multiple cells at one. I'd like errors to play a sound.

Many people would like long running cells to play a sound when completed.


回答1:


I mixed the solutions I found in some places 1 2 3 4

a) Create a global exception handler that beeps on errors

b) Create a simple function that you place at the end of the long-running cell (some other approaches on links)

You can change the sounds to anything you like.

Note: The sounds inside the Exception Handler and the beep_completed() are very different and with reason. The first is short and non-annoying and the second is long and pleasant (in case you are away from computer so you clearly hear that the task is completed). In any case you can replace them.

Note: There is a line that only applies to Colab. If you can provide the one for Jupyter I will gladly update the answer.

# This line is specific for Colab  (please provide alternative for Jupyter)
from google.colab import output

from IPython.core.ultratb import AutoFormattedTB

# Catch any Exception, play error sound and re-raise the Exception
#-------------------------------------------------
# initialize the formatter for making the tracebacks into strings
itb = AutoFormattedTB(mode = 'Plain', tb_offset = 1)

# this function will be called on exceptions in any cell
def custom_exc(shell, etype, evalue, tb, tb_offset=None):

    # still show the error within the notebook, don't just swallow it
    shell.showtraceback((etype, evalue, tb), tb_offset=tb_offset)


    # Play an audio beep. Any audio URL will do.  
    output.eval_js('new Audio("http://soundbible.com/grab.php?id=419&type=wav").play()')

    # # grab the traceback and make it into a list of strings
    # stb = itb.structured_traceback(etype, evalue, tb)
    # sstb = itb.stb2text(stb)

    # print (sstb) # <--- this is the variable with the traceback string
    # print ("sending mail")
    # send_mail_to_myself(sstb)

# this registers a custom exception handler for the whole current notebook
get_ipython().set_custom_exc((Exception,), custom_exc)
#------------------------------------------


# Function to play a sound (to put at the end of a long job)
def beep_completed():
  #url_sound="http://soundbible.com/grab.php?id=1795&type=mp3";
  output.eval_js('new Audio("http://soundbible.com/grab.php?id=1795&type=mp3").play()')

# Just play it with
beep_completed()


来源:https://stackoverflow.com/questions/61176900/jupyter-colab-play-sound-with-any-error-in-any-cell-play-sound-after-compl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!