必须同时启用pylint和flake8,因pylint主查逻辑隐患(如未使用变量、异常裸抛),flake8专攻pep 8风格(如空行、缩进、行尾空格),二者互补覆盖语法、风格、潜在错误三层;保存即检(lintonsave=true)且项目级配置(.pylintrc/.flake8)优先于用户级,确保规则可靠生效。

VSCode 的代码纠错规则(linting)不是锦上添花,而是写 Python 时避免手滑出错的底线保障——关掉它,等于裸写。
为什么 pylint 和 flake8 必须同时启用
只开 pylint 会漏掉大量 PEP 8 风格问题(比如行尾空格、空行数量),只开 flake8 又抓不到未使用变量、循环变量覆盖、异常裸抛等逻辑隐患。两者互补才能覆盖「语法+风格+潜在错误」三层。
-
pylint擅长检查作用域、继承关系、冗余代码,但对缩进/空格容忍度高 -
flake8基于pyflakes+pep8+McCabe,轻量且对格式敏感,E203、W503这类报错必须靠它暴露 - 共存时,VSCode 会在同一行叠加显示两类提示,比如
W0612(未用变量)和E501(超长行)可能同时标红
python.linting.lintOnSave 必须设为 true
设成 false 或不配置,等于把 linting 当成手动检查工具——没人会每次改完都主动按 Ctrl+Shift+P 调出 Python: Run Linter。保存即检,才能让错误在提交前就卡住。
- 如果保存后没反应,先确认
python.defaultInterpreterPath指向了装有pylint和flake8的 Python 环境 - 某些项目用了
venv但 VSCode 没自动识别,需右下角点击 Python 版本手动切换解释器 - 禁用
python.linting.lintOnType(默认 false),否则每敲一个字母都抖一下,干扰心流
项目级配置比用户级配置更可靠
在用户 settings.json 里全局开 linting,看似省事,实则埋雷:不同项目依赖不同规则(比如 Django 项目要忽略 W0613 未用参数,FastAPI 项目却要严格检查)。直接在项目根目录放配置文件,VSCode 会自动优先读取。
- 用
.flake8控制风格:max-line-length=88对齐black,ignore=E203,W503屏蔽已知误报 - 用
.pylintrc控制逻辑检查:disable=missing-docstring,too-few-public-methods关掉非强制项,enable=unreachable,import-error强制开启关键项 - 别把配置写进
settings.json,否则换机器或拉新同事代码库,规则就丢了
常见误报和绕过方式不能靠 disable 一刀切
看到 C0103(常量命名小写)就加 disable=C0103,是典型懒政。真正该做的是分场景处理:
- 单次忽略:在报错行末加
# pylint: disable=C0103,仅作用于该行 - 局部忽略:用
# pylint: disable=包围代码块,适合临时绕过第三方库调用 - 真需要全局关:只在
.pylintrc的[MESSAGES CONTROL]下加,且必须写明原因(比如“Django model 字段名强制小写”)
最易被忽略的是:linting 规则本身会随 pylint 版本升级新增检查项,升级后突然满屏报错,不是配置坏了,是工具变严格了——此时应逐条看新提示,而不是直接 disable 掉。











