要实现真正严格的python静态检查,必须切换到pyright语言服务器并配置pyrightconfig.json或pyproject.toml,因为pylance的"strict"模式仅是增强版basic,不启用关键规则且忽略标准配置文件。

想让 VSCode 真正做严格静态检查,光设 python.analysis.typeCheckingMode 为 strict 不够——它只对 Pylance 有效,而 Pylance 的 strict 实际上并不 strict。
为什么 python.analysis.typeCheckingMode: "strict" 不等于严格检查
Pylance 的 "strict" 模式本质是“增强版 basic”:它仍会跳过 reportMissingTypeStubs、reportUnknownArgumentType 等关键规则,也不会强制要求函数有返回类型注解。它不读 pyrightconfig.json,也不认 pyproject.toml 里的 [tool.pyright] 配置。你看到的红波浪线,只是 Pylance 自己挑着报的。
- 现象:写了
def foo(): return 42,Pylancestrict不报错;但 Pyright 会提示reportUntypedFunction - 原因:Pylance 把 Pyright 的严格规则集默认关掉了 70% 以上,只保留编辑体验友好的子集
- 影响:跨文件类型推导变弱,
Any泛滥时补全失效,重构时无法可靠定位调用点
要启用真正严格的检查,必须切到 Pyright 语言服务器
Pyright 是微软开源的独立类型检查器,它的 "strict" 是名副其实的——所有规则可配、全部基于标准 Pyright 规则集、支持完整配置文件驱动。
- 先确认已安装
pyrightCLI:终端运行pyright --version,无输出则需npm install -g pyright或pipx install pyright - VSCode 设置里搜
python.languageServer,把值从Pylance改成Pyright(注意大小写) - 重启窗口后,右下角状态栏应显示
Pyright v1.1.352+(2026 年最新稳定版),不是Pylance - 此时
python.analysis.typeCheckingMode的设置会被忽略——Pyright 只认自己的配置文件
Pyright 严格模式必须靠配置文件生效,不是 settings.json
VSCode 的 settings.json 对 Pyright 几乎无效。它只响应项目根目录下的 pyrightconfig.json 或 pyproject.toml(且后者必须写在 [tool.pyright] 下)。
-
pyrightconfig.json最简写法(推荐新手):{ "typeCheckingMode": "strict", "reportMissingTypeStubs": "error", "reportUnknownArgumentType": "error" } -
pyproject.toml写法(适合已有 toml 的项目):[tool.pyright] typeCheckingMode = "strict" reportMissingTypeStubs = "error" reportUnknownArgumentType = "error"
- 若两个文件共存,
pyrightconfig.json优先级更高;删掉它才能让 toml 生效 - 配置后无需重启 VSCode,保存文件即触发重分析(右下角会短暂显示 “Analyzing…”)
strict 模式下最该修的三类硬伤代码
开启 Pyright strict 后,别急着关掉警告。以下三类红波浪线基本就是必须改的逻辑缺陷:
-
def handle_data(x): ...→ 缺少参数类型注解,触发reportUntypedFunction;应改为def handle_data(x: dict[str, int]) -> None: -
import requests; r = requests.get("...")→ 若没装types-requests,触发reportMissingTypeStubs;要么pip install types-requests,要么加# type: ignore(慎用) -
items = []; items.append("a"); reveal_type(items)→ Pyright 推出list[Unknown],但reportUnknownMemberType会标红;应初始化为items: list[str] = []
复杂点在于:Pyright 的 strict 是“可配置的严格”,不是一刀切。有些规则(如 reportPrivateUsage)默认关着,得手动开;而 Pylance 根本不提供这些开关。真要工程级质量保障,得一条条看 pyrightconfig.json 里的 rule list,而不是依赖一个字符串开关。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











