VSCode默认不启用Python语法检测,必须手动开启linting并指定pylint或flake8等工具;需正确配置解释器、Pylance、linter路径及lintOnSave等三项关键设置,否则无法实时报错。
VSCode 默认不带 Python 语法检测,装完 Python 扩展只是第一步,真正要看到波浪线报错,必须手动启用 linting 并选对工具(比如 pylint 或 flake8),否则你写的 prin("hello") 也不会标红。
语法检测的前提是 VSCode 知道你在用哪个 Python 环境,且语言服务已启动。右下角状态栏如果显示 Python (idle) 或版本号后面跟着 Disabled,说明服务没跑起来。
/project/.venv/bin/python)Pylance(微软官方语言服务器),它负责类型推断、跳转、基础语法提示;仅装 Python 官方扩展(ms-python.python)默认不启用深度检查python.analysis.typeCheckingMode 是 basic 或 off —— 设为 off 会直接关闭所有类型相关警告(比如变量未定义、属性不存在)VSCode 不自带代码规则引擎,它只调用你本地装好的 pylint 或 flake8。它们不互通,也不能同时生效——你得明确告诉 VSCode 用哪一个。
which pylint(macOS/Linux)或 where pylint(Windows),确认命令存在;如果用虚拟环境,务必在激活状态下执行python.linting.enabled,设为 true
python.linting.pylintEnabled 或 python.linting.flake8Enabled,只开一个,另一个关成 false
flake8,必须填 python.linting.flake8Path 为刚才查到的完整路径(例如 /Users/you/.venv/bin/flake8),否则它根本不会运行很多人配完发现只有 Ctrl+S 后才标红,这是因为默认 linting 模式是 “打开文件时检查一次”,不是实时流式诊断。
立即学习“Python免费学习笔记(深入)”;
pylint 默认就是 on-type(边写边查),只要它启动成功,输入 consol. 就会立刻提示 undefined variable
flake8 默认不支持 on-type,它只在保存时触发;想“实时”,只能靠 Pylance 的语义分析补位(比如变量名拼错、函数参数类型不匹配)editor.quickSuggestions 为 true,否则部分提示(如 import 补全引发的未使用警告)可能被抑制python.linting.lintOnSave 反而有助于聚焦 on-type 行为——这个选项是给 flake8 类工具保底用的,开了反而容易混淆触发时机Django 的 objects、related_name 等属性是运行时动态注入的,pylint 静态分析会误判为“no member”。这不是配置错了,是工具局限。
pylint-django 插件:pip install pylint-django
settings.json 中加参数:"python.linting.pylintArgs": ["--load-plugins", "pylint_django"]
# pylint: disable=no-member 全局关掉——只在个别行加 # pylint: disable=invalid-name 这类精准开关更可控mypy 做类型检查,注意它和 pylint 规则不重叠,建议分场景启用:mypy 查类型,pylint 查风格与设计最常被忽略的一点:VSCode 的 Python linting 不会自动读取子目录下的 .pylintrc 或 pyproject.toml,所有配置文件必须放在你打开的「工作区根目录」,否则规则压根不生效。改完配置不用重启编辑器,但得关掉再重新打开一个 .py 文件才能刷新诊断状态。