如何让Jupyter Notebook在单元格报错时自动触发蜂鸣提醒?
Jupyter Notebook 全局报错自动蜂鸣实现方案
下面给出两种无需在每个单元格重复编写try/except的实现方式:
方案1:全局异常钩子(推荐)
只要在Notebook启动后运行一次下方代码,整个运行周期内所有单元格抛出未捕获异常时,都会自动触发蜂鸣,完全不需要修改现有业务代码:
from IPython import get_ipython import sys def exception_beep_handler(exc_type, exc_value, exc_traceback): # 保留原生报错输出 sys.__excepthook__(exc_type, exc_value, exc_traceback) # 跨平台通用蜂鸣,如无效果可替换为对应系统的蜂鸣逻辑 print('\a') # Windows用户可替换为下方代码(注释掉上面的print('\a')) # import winsound # winsound.Beep(440, 1000) # 440Hz频率,响1秒 # Mac用户可替换为语音提示 # import os # os.system('say "代码运行出错"') # 注册全局异常处理钩子 ipython_instance = get_ipython() ipython_instance.set_custom_exc((Exception,), lambda *args: exception_beep_handler(*args))
方案2:自定义单元格魔法(按需启用)
如果不需要全局生效,只希望部分指定单元格有报错蜂鸣效果,可以先运行一次下方代码注册自定义魔法:
from IPython.core.magic import register_cell_magic @register_cell_magic def beep_if_error(line, cell): try: # 执行单元格内的代码,共享当前Notebook的命名空间 exec(cell, get_ipython().user_ns) except Exception as e: print('\a') # 重新抛出异常,保证报错信息正常展示 raise e
后续需要启用蜂鸣的单元格,只需要在第一行加上%%beep_if_error即可。
补充说明
- 部分Linux发行版默认关闭了终端蜂鸣,需要先在系统设置中开启蜂鸣提示,
print('\a')才会生效 - 上述两种方案只会对未被捕获的异常生效,如果代码内已经自行写了try/except消化了异常,不会触发蜂鸣
内容的提问来源于stack exchange,提问作者Sadaf Shafi
相关产品推荐
相关产品推荐

