"Future Pending":JupyterLab中为何无法执行用户输入代码
报错根因
该报错和代码写法无关,是旧版本pyolite(Pyodide)内核的已知原生缺陷:pyolite是运行在浏览器Web Worker沙箱内的Python运行时,旧版本没有完成和JupyterLab前端输入组件的通信绑定,调用input()时前端负责拉起输入弹窗的sendInputRequest接口为空,就会触发你看到的null引用类型错误。
重启运行环境、替换raw_input()都无法解决问题:一方面环境重置不会修复内核本身的实现缺陷,另一方面pyolite基于Python 3构建,根本不存在raw_input()这个Python2专属的内置方法,替换后只会触发名称错误,该问题也和css-loader版本没有关联。
解决方法
- 切换为标准IPython内核:将当前运行内核从pyolite更换为连接本地/服务端Python进程的常规IPython内核,原有代码不需要任何修改即可正常运行
input()。 - 必须使用pyolite内核的场景下,绕过内置
input(),直接调用浏览器原生API实现输入交互,可直接替换为如下代码:
import js number = js.prompt("enter a number: ") print(number)
- 升级JupyterLite部署版本到0.1.0及以上正式版,新版本的Pyodide内核已经修复了标准
input()方法和前端的通信逻辑,升级后可直接使用原生input()。
内容的提问来源于stack exchange,提问作者Lara
相关产品推荐
相关产品推荐

