运行plt.subplots出现UnicodeDecodeError错误,终端正常仅Spyder/Jupyter报错
问题排查与解决思路
该报错的核心触发逻辑是:Spyder/Jupyter Lab运行代码时,matplotlib生成的inline图片需要通过内核序列化为JSON格式传输给前端界面渲染,JSON序列化阶段误将PNG格式图片的二进制字节流当成UTF-8编码的字符串解码(PNG文件的首字节固定为0x89,与报错内容完全匹配)。终端运行无报错是因为终端直接调用系统GUI后端渲染图片,无需走JSON序列化传输流程。
可按以下优先级排查解决:
- 验证问题根因:在原有代码后新增一行
plt.close()重新运行,如果不再报错,即可确认是inline图片序列化的问题,直接执行后续修复步骤 - 修复依赖包兼容性问题(最高概率解决):近期更新过依赖包的用户优先尝试,执行命令降级simplejson到兼容版本:
pip install simplejson==3.17.6,新版simplejson的字节序列化逻辑变更会触发该类解码错误。如果降级后仍有问题,执行命令升级内核相关依赖:pip install --upgrade matplotlib_inline ipykernel jupyter_client - 修改inline图片输出格式:在导入matplotlib前添加以下配置,改用SVG格式输出图片,绕过PNG二进制解码问题:
import matplotlib matplotlib.use('module://matplotlib_inline.backend_inline') import matplotlib_inline matplotlib_inline.backend_inline.set_matplotlib_formats('svg')
- 检查系统默认编码配置:运行代码
import sys; print(sys.getdefaultencoding()),确认输出为utf-8,如果输出不符,在系统环境变量中新增PYTHONUTF8=1后重启Spyder/Jupyter Lab即可
内容的提问来源于stack exchange,提问作者Heming
相关产品推荐
相关产品推荐

