vscode中mypy不报错,主因是未启用mypy作为linter或配置错误:需通过命令面板选择mypy、确认已安装、正确配置python.linting.mypyargs为数组格式、指定--python-executable路径,并注意版本兼容性与pylance冲突问题。

VSCode 里 mypy 不报错?先确认它真在运行
很多情况下,你装了 mypy、配了插件,但编辑器就是不标红任何类型错误——根本原因往往是 VSCode 没调用 mypy,而是默认用了 Pylance 或 Python 官方语言服务器做类型检查,它们不执行 mypy 的严格校验。
- 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),搜Python: Select Linter,选mypy(不是pylint或flake8) - 确保工作区已安装
mypy:终端运行which mypy(macOS/Linux)或where mypy(Windows),返回路径才有效;没返回就先pip install mypy - VSCode 默认只对打开的文件做 lint,不会自动扫描整个项目——想看
foo.py里调用bar.py的类型错误,得把bar.py也打开一次
settings.json 里怎么写 mypy 配置才生效
VSCode 的 Python 扩展通过 python.linting.mypyArgs 传参给 mypy,但参数格式敏感,错一个引号或空格就静默失败。
- 必须用数组形式写参数,不能拼成字符串:
"python.linting.mypyArgs": ["--strict", "--show-column-numbers", "--python-executable", "/usr/bin/python3"]
-
--python-executable很关键:如果你用 conda/virtualenv,不指定就会用系统 Python,导致找不到包或类型 stub;建议填./venv/bin/python(Linux/macOS)或./venv/Scripts/python.exe(Windows) - 避免加
--file或--follow-imports:VSCode 自己控制检查范围,硬加反而干扰;真正需要的是--show-traceback(仅调试时开,方便定位配置问题)
为什么 mypy 报错但 VSCode 不显示?常见兼容性陷阱
VSCode 的 Python 扩展对 mypy 版本有隐式要求,且输出格式必须匹配,否则解析失败,错误就“消失”了。
- mypy ≥ 1.0 之后默认输出 JSON 格式(
--output-format json),但老版 VSCode 插件只认普通文本;升级插件到 v2023.10+ 可解决 - 如果项目用了
pyproject.toml,mypy 会优先读它,VSCode 的mypyArgs只是补充;此时[[tool.mypy.overrides]]里的路径过滤可能屏蔽掉你正在编辑的文件 - Windows 下路径分隔符容易出问题:比如
--exclude "tests\.*"在 JSON 数组里要写成"--exclude", "tests\\.*"(四个反斜杠)
想让 mypy 和 Pylance 共存?别让它们互相覆盖
很多人想要 Pylance 的智能补全 + mypy 的强类型检查,但两者默认冲突:Pylance 会把 mypy 的报错当“重复提示”压掉。
- 关掉 Pylance 的类型检查:在
settings.json加"python.languageServer": "Default"
(即用微软官方语言服务器,不启用 Pylance) - 或者保留 Pylance,但禁用它的类型提示:设
"python.analysis.typeCheckingMode": "off"
,只留 mypy 负责类型 - 注意:Pylance 的
revealType()提示和 mypy 的reveal_type()是两套机制,后者必须靠 mypy 命令行执行才能看到结果,VSCode 内联不显示
最常被忽略的一点:mypy 不检查未被 import 的模块,也不检查 .pyi 文件以外的 stub;你改了函数签名,但调用方没重开文件,VSCode 就不会触发重新检查——手动保存一下或重启窗口更可靠。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











