ob-ipython里面运行ipython代码块时,会报错json-readtable-error。打开debug-on-error之后看到Debugger entered–Lisp error: (json-readtable-error . 69)。
在ob-ipython的issue里面找过。说是没有jupyter。可是打开后台进程可以看到jupyter已经启动。
有时把:session去掉会正常运行。有时又要把:session加上才行。多数时候只会报这个错。无法运行。摸不着头脑。
有谁知道这个问题是怎么回事吗?
附上系统信息:
- OS: archlinux
- Emacs: 27.0.50
- Spacemacs: 0.300.0
- Spacemacs branch: develop (rev. 6a724e416)
spacemacs以及所有包都是最新版本。
下面这个评论认为 ob-ipython 本身就有 Bug,并给出了临时解决方案,不知道对你有没有帮助。
1 个赞
多谢。我按这个issue的方法看了一下,问题不一样。可能是权限的问题,显示sqlite3.OperationalError: disk I/O error
应该是wsl的锅。sqlite会报这个错sqlite3.OperationalError: disk I/O error。解析json时buffer里面有这些错误信息,自然就报错json-readtable-error。https://github.com/Microsoft/WSL/issues/2395
问题解决了。对ob-ipython–execute-request做了一点修改。在解析json之前把错误信息删除。
(defun ob-ipython--execute-request (code name)
(with-temp-buffer
(let ((ret (apply 'call-process-region code nil
(ob-ipython--get-python) nil t nil
(list "--" ob-ipython-client-path "--conn-file" name "--execute"))))
(if (> ret 0)
(ob-ipython--dump-error (buffer-string))
;; hack start
(goto-char (point-min))
(if (not (search-forward "Error in atexit" nil t))
(search-forward "Error in atexit" nil t)
(delete-region (line-beginning-position) (point-max))
)
;; hack end
(goto-char (point-min))
(ob-ipython--collect-json)
))))
我直接在init.el里面加载这个函数。有没有更加优雅点的办法?我看到有用advice-add的。
advice可以在原函数的前后加一点东西,如果是在中间插入一点,好像只能重新defun了。