You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker内运行mypy 0.910偶发JSONDecodeError是否为配置错误?

根因说明

你没有配置错误,该问题是mypy 0.910版本的已知缺陷导致的:

  • mypy的增量检查功能会将类型解析结果以JSON格式写入.mypy_cache目录下的缓存文件
  • 0.910版本的缓存写入逻辑没有做原子性保障,当运行过程中出现进程异常终止(比如容器资源不足被OOM强制杀死、构建任务中途取消、共享存储写入延迟等场景)时,正在写入的JSON文件会被截断,没有完成完整写入
  • 下次运行mypy读取损坏的缓存文件时,就会抛出你遇到的JSONDecodeError: Unterminated string报错
解决方案

快速临时解决

不需要完整重建容器,只需要删除损坏的mypy缓存目录即可恢复正常,执行命令:

rm -rf .mypy_cache

再重新运行你的mypy命令即可。

永久规避方案

你可以根据你的使用场景选择以下任意一种方案:

  • 禁用增量缓存:在原mypy命令中添加--no-incremental参数,每次运行都会全量检查类型,不会读写缓存文件,彻底避免缓存损坏问题,适合单次运行的CI/CD场景
    修改后命令参考:
    mypy --install-types --non-interactive --no-incremental --config-file=../setup.cfg "$@"
    
  • 增加自动重试逻辑:将mypy运行命令封装为shell脚本,首次运行失败时自动清理缓存重试,兼顾增量缓存的速度和稳定性,脚本示例:
    #!/usr/bin/env bash
    mypy --install-types --non-interactive --config-file=../setup.cfg "$@"
    exit_code=$?
    # 识别到缓存相关错误时自动清理重试
    if [ $exit_code -eq 1 ]; then
      rm -rf .mypy_cache
      mypy --install-types --non-interactive --config-file=../setup.cfg "$@"
      exit_code=$?
    fi
    exit $exit_code
    
  • 升级mypy版本:如果你的项目Python版本支持,可将mypy升级到0.941及以上版本,该缓存写入的原子性问题已经在后续版本修复;你当前使用的是Python3.6,最高可兼容mypy 0.971版本,可直接升级到该版本解决问题
  • 容器运行优化:如果是在CI流程的容器中运行,可将.mypy_cache目录配置为临时卷,每次任务结束后自动销毁,避免跨任务的缓存污染

内容的提问来源于stack exchange,提问作者Paulo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:24:05