先悬停看报错末尾是否标有(pylance),再查problems面板source列确认;若确为pylance,优先用ctrl+.添加# pyright: ignore而非全局禁用诊断。

确认Pylance是否真正在报错
VSCode里一行红色波浪线,背后可能是 Pylance、pyright、mypy 或 pylint —— 它们共存但互不干扰。不先确认来源,改设置就是蒙眼开枪。
最稳的判断方式:
- 悬停在报错处,看末尾括号里写的是
(pylance)还是别的 - 打开
Problems面板(Ctrl+Shift+M),看每条错误右侧的Source列 - 别信状态栏右下角那个“Python 3.x”——它只表示解释器,不表示谁在检查类型
typeCheckingMode 设为 basic 是多数项目的合理起点
python.analysis.typeCheckingMode 是开关,不是装饰项。设成 off 就等于放弃 Pylance 最核心的价值;设成 strict 又容易对 requests、pandas 这类未带完整 stub 的库狂报 Import "xxx" could not be resolved。
实操建议:
- 在
settings.json中明确加这一行:"python.analysis.typeCheckingMode": "basic" -
basic模式会捕获Argument of type "str" cannot be assigned to parameter "int"这类硬伤,但放过未标注函数返回值、隐式Any等弱推断场景 - 如果项目已大量使用
TypedDict或Protocol,再考虑升到strict,否则先别碰
第三方库报“未解析导入”?先核对解释器路径和包名
Pylance 不看 pip list 输出,只认当前激活解释器的 site-packages。你终端里能 import requests,不代表 VSCode 也能。
必须检查的三件事:
- 按
Ctrl+Shift+P→ 输入Python: Select Interpreter,选中你实际运行pip install的那个环境(比如./venv/bin/python) - 右下角状态栏显示的 Python 路径,要和你在终端执行
which python的结果一致 - 注意包名 ≠ 导入名:比如
pip install python-dotenv,代码里得写import dotenv;pip install Pillow,得写from PIL import Image—— Pylance 按import后面的字符串找
想静默某条警告?优先用 # pyright: ignore 而非关全局
看到 reportOptionalMemberAccess 或 reportGeneralTypeIssues 报红,第一反应不该是去 settings.json 里加 "none",那等于给整栋楼拉闸。
更精准的做法:
- 光标放在报错行,按
Ctrl + .,选Suppress diagnostic,自动生成# pyright: ignore[reportOptionalMemberAccess] - 如果是动态属性(比如 Flask 的
request.args.get()),在行尾加# type: ignore即可 - 避免配置
"python.linting.enabled": false或"python.analysis.diagnosticSeverityOverrides": {"*": "none"}—— 这些会同时屏蔽真实危险,比如None解引用
真正难处理的,是那些依赖 .pth 文件的可编辑安装(pip install -e .)。如果 .pth 里含 import _editable_impl 这种导入钩子,Pylance 在 Python 3.13 之前根本读不懂——这时候不是配置问题,是机制限制。











