pre-commit mirrors-mypy仍报已修复错误,报错行实际为空求排查
问题原因及解决办法
核心可能原因
- mypy版本不匹配:你配置里指定了
rev: v1.9.0,但同时设置了language: system,这会让pre-commit调用系统全局的mypy,而非配置指定的1.9.0版本。不同版本的mypy可能存在行号计算、规则判断的差异,导致报错行号和实际文件不符。 - 文件换行符/编码偏移:如果你的文件使用CRLF(Windows)换行,而mypy按LF(Unix)格式计算行号,会导致报错行号和实际文件行号不一致,出现空行报错的情况。
- 全目录检查干扰:
pass_filenames: false会让mypy每次检查整个src/目录,可能触发未提交文件的旧报错,但你提到已修复代码,这个可能性较低。
解决步骤
- 修正pre-commit配置,统一mypy版本
移除language: system配置,让pre-commit自动安装指定的v1.9.0版本mypy,避免版本不一致问题:
- repo: https://github.com/pre-commit/mirrors-mypy rev: v1.9.0 hooks: - id: mypy pass_filenames: false args: [ src/, --python-version, "3.11", --cache-dir, /dev/null ]
- 手动验证mypy报错
在终端直接执行以下命令,查看实际报错内容和行号:
mypy src/ --python-version 3.11 --cache-dir /dev/null
- 如果手动执行的行号正确,说明是pre-commit调用的mypy版本问题,修正配置后即可解决。
- 如果手动执行行号仍错误,检查文件换行符(转成LF格式)或编码(确保文件无BOM头)。
- 可选:缩小检查范围
如果不需要每次检查整个src/目录,移除pass_filenames: false,让pre-commit仅检查当前提交的文件,减少无关报错:
- repo: https://github.com/pre-commit/mirrors-mypy rev: v1.9.0 hooks: - id: mypy args: [ --python-version, "3.11", --cache-dir, /dev/null ]
内容的提问来源于stack exchange,提问作者swats-the-floran
相关产品推荐
相关产品推荐

