Jupyter Notebook函数内调用save_checkpoint保存检查点不生效问题
问题原因
- Jupyter Notebook 会自动渲染执行代码单元格输出的
Javascript对象,你直接在单元格顶层执行Javascript('IPython.notebook.save_checkpoint();')时,这个对象会作为单元格的输出被捕获,进而触发JS代码执行。 - 你封装的自定义函数没有将生成的
Javascript对象返回,也没有手动触发渲染,函数执行完默认返回None,Jupyter不会处理函数内部创建后没有被输出的Javascript实例,对应的保存检查点逻辑自然不会生效。
修复方案
有两种常用的可行写法:
方案1:返回Javascript对象
from IPython.display import Javascript def save_file(): # 可在此处添加其他自定义逻辑 return Javascript('IPython.notebook.save_checkpoint();') # 直接调用函数即可,返回的JS对象会被单元格自动渲染执行 save_file()
方案2:函数内部手动调用display触发渲染
如果函数不需要返回值,或者有其他返回内容,可以用display方法主动触发JS执行:
from IPython.display import Javascript, display def save_file(): # 可在此处添加其他自定义逻辑 display(Javascript('IPython.notebook.save_checkpoint();')) save_file()
内容的提问来源于stack exchange,提问作者Adler Müller
相关产品推荐
相关产品推荐

