学习目标
- 理解 Pylint 的作用和核心概念
- 掌握 Pylint 的安装和基本使用
- 了解代码质量检查的重要性
- 掌握基本的命令行使用方法
知识点
Pylint 概述
Pylint 是一个 Python 静态代码分析工具,用于:
- 检查编程错误:语法错误、逻辑错误、运行时错误
- 强制执行编码标准:PEP8 规范、命名约定
- 检查代码异味:重复代码、复杂度过高
- 提供重构建议:代码优化和改进建议
10/3/25About 6 min
学习目标
Pylint 是一个 Python 静态代码分析工具,用于:
学习目标
Pylint 将检查结果分为五种类型,每种类型用不同的字母前缀标识:
| 类型 | 前缀 | 说明 | 严重程度 | 评分影响 |
|---|---|---|---|---|
| Fatal | F | 致命错误,阻止进一步处理 | 最高 | -10分 |
| Error | E | 编程错误,可能导致异常 | 高 | -10分 |
| Warning | W | 潜在问题,需要注意 | 中 | -2分 |
| Convention | C | 违反编码约定 | 低 | -1分 |
| Refactor | R | 代码重构建议 | 中 | -5分 |
学习目标
Pylint 按以下顺序查找配置文件:
学习目标
PEP8 是 Python 官方的代码风格指南,定义了 Python 代码的编写规范:
学习目标
圈复杂度是衡量程序复杂性的重要指标:
| 检查类型 | 消息ID | 默认阈值 | 描述 |
|---|---|---|---|
| 圈复杂度 | R0911 | 12 | 函数/方法的圈复杂度 |
| 函数长度 | R0915 | 50 | 函数中的语句数量 |
| 参数数量 | R0913 | 5 | 函数参数个数 |
| 局部变量 | R0914 | 15 | 函数中局部变量数量 |
| 分支数量 | R0912 | 12 | 函数中分支数量 |
| 嵌套深度 | R0101 | 5 | 代码块嵌套层数 |
学习目标
| 优先级 | 导入类型 | 示例 | 说明 |
|---|---|---|---|
| 1 | 标准库 | import os, sys |
Python 内置标准库 |
| 2 | 第三方库 | import requests, numpy |
通过 pip 安装的包 |
| 3 | 本地模块 | from .utils import helper |
项目内部模块 |
学习目标
| 原则 | 描述 | Pylint检查 |
|---|---|---|
| 单一职责 | 类应该只有一个变化的原因 | too-many-public-methods |
| 开闭原则 | 对扩展开放,对修改关闭 | - |
| 里氏替换 | 子类必须能够替换父类 | abstract-method |
| 接口隔离 | 客户端不应依赖不需要的接口 | too-few-public-methods |
| 依赖倒置 | 依赖抽象而不是具体实现 | - |
学习目标
| 原则 | 说明 | Pylint检查 |
|---|---|---|
| 具体捕获 | 捕获具体的异常类型 | broad-except |
| 异常链 | 保留原始异常信息 | raise-missing-from |
| 资源清理 | 确保资源正确释放 | - |
| 日志记录 | 记录异常详细信息 | - |
学习目标
// .vscode/settings.json
{
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.linting.pylintPath": "pylint",
"python.linting.pylintArgs": [
"--rcfile=.pylintrc",
"--reports=no",
"--score=no",
"--msg-template={path}:{line}:{column}:{category}:{msg_id}:{msg}",
"--output-format=json"
],
"python.linting.lintOnSave": true,
"python.linting.maxNumberOfProblems": 100,
"python.formatting.provider": "black",
"python.formatting.blackArgs": [
"--line-length=88"
],
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
"files.associations": {
".pylintrc": "ini"
}
}
学习目标
| 检查器类型 | 接口 | 用途 | 示例 |
|---|---|---|---|
| AST检查器 | IAstroidChecker | 分析抽象语法树 | 检查函数复杂度 |
| 原始检查器 | IRawChecker | 分析原始代码文本 | 检查代码格式 |
| 令牌检查器 | ITokenChecker | 分析词法令牌 | 检查标识符命名 |