人人都会AI编程

检查:flake8、pylint、mypy 静态类型检查

更新时间:2026-07-12

代码格式化工具(Black、isort)保证代码“看起来”一致,而静态检查工具则深入代码逻辑,帮你提前发现潜在的错误、风格问题和类型隐患,在代码运行之前就把坑填上。以下三者是 Python 项目中最主流的检查工具,各司其职。


flake8:风格与基础错误检查

  • 做什么:将 Pyflakes(逻辑错误检查)、pycodestyle(PEP 8 风格检查)和 McCabe(代码复杂度检查)打包在一起,一键扫描。
  • 典型能发现的问题
  • 未使用的变量或导入
  • 缩进混用(空格与 Tab)
  • 过长的行、缺少空行等格式违规
  • 函数复杂度过高
  • 快速上手
  pip install flake8
  flake8 your_script.py      # 检查单个文件
  flake8 src/                # 检查整个目录
  
  • 实用提示:常与 CI 流水线集成,设置配置文件 .flake8 忽略某些规则(如行宽限制),避免与 Black 冲突。
  • 定位:轻量级第一道防线,重在规范和明显错误,项目必备。

pylint:深度代码分析

  • 做什么:不仅检查风格,还会深入分析代码结构、逻辑和可能的设计问题,并给出重构建议和详细报告。
  • 典型能发现的问题
  • 接口未实现、参数数量不匹配
  • 重复代码、过长的函数或类
  • 潜在的异常未处理
  • 不符合命名规范的变量名
  • 快速上手
  pip install pylint
  pylint your_module.py      # 检查并输出评分和问题列表
  
  • 实用提示
  • 规则非常严格,初次使用可能报告大量问题,可通过 .pylintrc 按项目需求定制规则(如放宽变量名长度限制、忽略某些目录)。
  • 适合作为代码评审的辅助工具,但不建议死板追求满分,关注重要建议即可。
  • 定位:重量级代码卫士,适合对代码质量有高要求的长期维护项目。

mypy:静态类型检查

  • 做什么:Python 是动态类型语言,但我们可以用 Type Hints 注解函数参数和返回值。mypy 会“看懂”这些注解,检查实际调用是否类型兼容,在不运行代码的情况下发现类型错误
  • 典型能发现的问题
  • 函数传入了错误类型的参数
  • 变量赋值类型与声明冲突
  • Optional 值未做 None 判断就直接使用
  • 快速上手
  pip install mypy
  mypy script.py             # 检查已添加类型注解的代码
  
  • 实用提示
  • 需要先在代码中渐进添加类型提示(def greet(name: str) -> str:),mypy 只检查有注解的部分。
  • 对于第三方库,可能需要安装对应的类型存根(types-requests 等),否则 mypy 会报“未知类型”而忽略检查。
  • 配合 IDE(VS Code、PyCharm)可以实时提示类型错误,极大提升开发体验。
  • 定位:类型安全卫士,在多人协作大型项目中价值极高,能有效避免“参数传错类型导致线上诡异 bug”。

三者的合理搭配

  • 日常编码:依靠 IDE 插件实时使用 flake8 和 mypy,即时修正。
  • 提交前或 CI 阶段:依次运行 flake8pylintmypy,确保无关键告警。
  • 规则配置:在项目根目录提供 .flake8.pylintrcmypy.ini(或 pyproject.toml 中的 [tool.mypy] 段落),团队成员共享一致标准,减少无意义的风格争议。

用好这三个工具,相当于给代码上了三道保险,让潜在问题在早期就被发现,大大降低后期调试成本和线上事故概率。