必须手动在命令面板选择python: select linter并指定mypy,保存含类型错误的文件后检查“问题”面板是否出现如“argument 1 to 'greet' has incompatible type 'int'”提示;若无反应,需验证mypy路径、解释器一致性、settings.json中mypyargs数组格式、pylance是否禁用及pyproject.toml排除规则。

怎么确认 mypy 真正在 VSCode 里跑起来
它没报错,大概率根本没运行——不是你代码没问题,而是 VSCode 压根没调 mypy。最直接验证方式:打开命令面板(Ctrl+Shift+P 或 Cmd+Shift+P),搜 Python: Select Linter,必须手动选中 mypy(不能留空、不能选 Pylance 或 pylint)。选完后保存一个带类型错误的文件(比如传 int 给期望 str 的函数),看“问题”面板是否出现类似 Argument 1 to "greet" has incompatible type "int"; expected "str" 的提示。
如果没反应:
- 终端运行
which mypy(macOS/Linux)或where mypy(Windows),无输出就先pip install mypy - 有路径但不生效,检查底部状态栏 Python 解释器路径是否和虚拟环境一致(比如
./venv/bin/python) - VSCode 只 lint 当前打开的文件,
foo.py调了bar.py的函数?得把bar.py也打开一次
settings.json 里 mypyArgs 怎么写才不静默失效
python.linting.mypyArgs 是个高敏感字段,格式错一点就完全不工作,且零提示。必须用 JSON 数组,每个参数单独一项:
"python.linting.mypyArgs": ["--strict", "--show-column-numbers", "--python-executable", "./venv/bin/python"]
常见错误:
- 写成字符串:
"--strict --show-column-numbers"→ 直接失效 -
--python-executable没配或路径错:用系统 Python 跑,找不到项目包或 stub - 加了
--file或--follow-imports:VSCode 自己控制检查范围,硬加反而干扰 - Windows 下
--exclude正则写成"tests.*"→ 必须写成"tests\.*"(四个反斜杠)
为什么开了 mypy 还是只看到 Pylance 的提示
Pylance 默认开着,它也会标红类型问题,但它的“类型检查”和 mypy 完全不是一回事:不强制函数注解、不报 reportMissingTypeStubs、不校验 Any 泄漏。你看到的“没错误”,可能是 Pylance 放过了,而 mypy 本该报。
调用 Cutout.Pro 视觉处理 API 进行背景移除、人像抠图和照片增强,支持文件上传与图片 URL 输入。
解决方法只有两个明确选择:
- 关掉 Pylance:设置里搜
python.languageServer,改成None;或者卸载 Pylance 插件(只留官方 Python 扩展) - 或者至少设
python.analysis.typeCheckingMode为off,避免双服务器打架 - 改完必须重启 VSCode 窗口,右下角状态栏要看到
mypy字样,不是Pylance或Default
pyproject.toml 会悄悄覆盖你的 VSCode 配置
只要项目根目录有 pyproject.toml,mypy 就优先读里面的 [tool.mypy],VSCode 的 mypyArgs 只是补充。很多人配好了 settings.json 却没效果,就是因为 pyproject.toml 里写了:
[[tool.mypy.overrides]]<br>files = ["tests/.*"]<br>exclude = true
结果整个 tests/ 目录被跳过,你正在编辑的测试文件压根不检查。
排查建议:
- 临时重命名
pyproject.toml,看 mypy 是否突然开始报错 - 检查
[[tool.mypy.overrides]]和[tool.mypy.plugins]段落,尤其注意exclude和plugins是否禁用了当前路径 - Windows 用户注意路径分隔符:
src.*在 TOML 里要写成src\.*
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










