目录
注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus
在Python开发中,代码规范和错误检查是非常重要的环节。良好的代码规范可以提高代码的可读性和可维护性,而错误检查能够帮助我们及时发现和修复潜在的问题。在众多的代码规范和错误检查工具中,flake8是一个受欢迎且功能强大的工具。本文我将详细介绍flake8的特点、使用方法和实践经验。
本篇文章《Python代码扫描:Python代码规范与错误检查的利器-flake8详解与实践》属于【Python代码规范与扫描】系列内容的第六篇,前面五篇可以根据自己情况自行查阅,同时欢迎公众号CTO Plus后续的文章:
代码规范与静态扫描系列内容:
- 《企业级Python代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码自动编排介绍》
- 《通读Python PEP8代码规范》
- 《Python代码扫描:新一代 Python Linter工具Ruff》
- 《Python代码扫描:提升Python代码质量的神器-pylint详解与使用指南》
- 《Python代码扫描:轻量级Python静态代码分析工具pyflakes》
- 《Python代码扫描:Python代码规范与错误检查的利器-flake8详解与实践》
- 《Python代码扫描:静态类型检查的最佳选择mypy》
- 《Python代码扫描:自动化移除Python代码中的冗余-autoflake使用技巧与实例》
- 《Python代码扫描:Python代码格式化的利器-yapf详解与最佳实践》
- 《Python代码扫描:一键格式化Python代码的黑魔法-black使用教程》
- 《Python代码扫描:导入语句自动排序工具-isort使用指南与示例》
- 《Python代码扫描:自动化修复Python代码风格的工具-autopep8详解与实例》
- 《Python代码扫描:项目中的代码规范与错误检查-pyproject-flake8配置与使用方法》
- 《Python代码扫描:企业级代码代码安全漏洞扫描Bandit》
介绍
Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具,相对于目前热度比较高的Pylint来说,Flake8检查规则灵活,支持集成额外插件,扩展性强。可以编写程序实现代码规范性检测。
和 Pylint 类似,Flake8 允许通过配置文件来自定义检查的内容。它有非常清晰的文档,包括一些有用的提交钩子,可以将自动检查代码纳入到开发工作流程之中。
Flake8 也可以集成到一些流行的编辑器和 IDE 当中,比如PyCharm,后面章节会介绍到。
Flake8 包含三个代码库,是“将 PEP 8、pycodestyle、Pyflakes、Pylint、McCabe(代码复杂性检查器)和第三方插件整合到一起,以检查 Python 代码风格和质量的一个 Python 工具”。
Ned Batchelder's McCabe script是一个Python代码分析工具,用于计算一个函数的McCabe复杂度。 McCabe复杂度是一种衡量代码复杂度的指标,它基于流程图中的节点和分支数量。 Batchelder的脚本使用AST(抽象语法树)分析Python函数,并计算其McCabe复杂度。此工具可用于评估代码的可维护性和理解复杂性。
flake8的特点
flake8是一个集成了多个工具的Python代码规范和错误检查工具,具有以下几个特点:
1. 综合性强:flake8集成了多个工具,包括pycodestyle、pyflakes和McCabe等,可以一次性检查出代码中的多种问题。这样可以减少工具的安装和配置,提高开发效率。
2. 灵活可定制:flake8提供了丰富的配置选项,可以根据项目的需求进行定制。我们可以通过配置文件或命令行参数来设置规则和忽略列表,以适应不同的项目和团队。
3. 易于集成:flake8可以与其他工具和环境集成,如编辑器、持续集成系统和代码审查工具等。这样可以在开发过程中实时检查代码,并及时给出反馈,提高代码质量。
4. 可扩展性强:flake8支持自定义插件,我们可以根据自己的需求定义自己的检查规则。这使得flake8可以适应不同项目和团队的需求。
安装&配置
我们可以在自己的虚拟环境下使用PIP安装:pip install flake8
PyCharm中配置Flake8
我们依然可以像前面的Ruff和pylint工具一样在我们的IDE编辑器中配置flake8检测工具,哦配置如下:
name:Flake8(随便写一个)
Program: `$PyInterpreterDirectory$/python`
Arguments: -m flake8 --max-line-length=130 --exclude venv,migrations $ProjectFileDir$ (可以根据自己的需求进行配置)
Working directory: `$ProjectFileDir$`
使用经验
在实际使用flake8的过程中,可以根据以下经验来提高检查的效果:
1. 配置规则:根据项目的需求,可以通过配置文件或命令行参数来设置规则和忽略列表。可以参考flake8的官方文档和社区的经验,选择适合自己项目的规则。
2. 定期检查:建议定期对代码进行检查,以保持代码的质量和可维护性。可以在代码提交前或持续集成环境中执行检查,帮助我们及时发现和修复问题。
3. 关注警告:除了错误,flake8还会输出警告信息。有时警告可能不是严重的问题,但也值得关注。可以根据项目的需求,决定是否修复警告。
4. 结合编辑器:建议在编辑器中集成flake8,以便在开发过程中实时检查代码。许多流行的编辑器,如VS Code和PyCharm,都提供了flake8的插件和集成功能。
接下来我将介绍下这块的使用
命令行参数
此处我总结下Flake8工具常用的一些命令行参数,其他的可以参考官方文档:
--max-line-length=<length>:设置每行的最大字符数,默认为79。
--ignore=<errors>:设置要忽略的错误代码,多个错误代码用逗号分隔。
--exclude=<patterns>:设置要排除的文件或目录模式。
--filename=<patterns>:设置要检查的文件或目录模式。
--max-complexity=<number>:设置函数的最大复杂度,默认为10。
--select=<errors>:设置要检查的错误代码,多个错误代码用逗号分隔。
PyCharm中使用
在需要检查的项目中,右键选择外部工具Flake8即可,此时就会输出我们代码的一些问题
也可以通过设置对指定目录进行排除扫描: $FilePath$ --exclude templates_module
命令行中使用
- 针对整个项目文件
如果要检查整个项目,直接在项目根目录下执行flake8指令即可,或者带上指定的目录
flake8 [options] path/to/dir
- 针对单个文件
我们也可以针对指定的单个文件进行代码检测
flake8 [options] path/to/module.py
flake8 pylint_test.py
- 针对某个检查项进行单个文件检测
如果只想检测某一个检查项,我们可以通过参数select来指定
flake8 --select=F401 filename.py
其中, --select=F401 表示仅检查未使用的变量,filename.py 表示要检查的 Python 文件的名称。
使用配置文件对项目进行扫描
我们可以在项目的根目录下新建一个.flake8的文件,我们指定flake8这款工具时,他会默认找根目录下的配置文件,然后根据这个配置文件对项目做扫描。
屏蔽指定代码行中的指定检查项
如果我们想屏蔽掉代码中指定的某行的检测,以及指定检测项的检测,flake8也可以轻松实现。
我们可以通过在指定代码行上使用注释和noqa来做标记:# noqa: F405
改成如下即可
忽略整个文件的所有错误的方法:
我们也可以在文件开头处加上 # flake8: noqa 即可实现不针对这个文件做任何的检测
noqa像在单独的行中一样,无法在文件顶部放置针对特定代码的注释。# flake8: noqa: F401乍一看可能起作用,但实际上仅被检测为# flake8: noqa,这意味着“忽略文件中的所有消息”。
总的来说,flake8是一个受欢迎且功能强大的Python代码规范和错误检查工具,可以帮助我们提高代码的质量和可维护性。它具有综合性强、灵活可定制、易于集成和可扩展性强的特点。通过使用flake8,我们可以一次性检查出代码中的多种问题,并及时修复。让我们一起使用flake8,打造规范且高质量的Python代码!
参考资料
- flake8配置:Configuring Flake8 — flake8 6.1.0 documentation
- flake8钩子:Using Version Control Hooks — flake8 6.1.0 documentation
- Flake8: Your Tool For Style Guide Enforcement — flake8 6.1.0 documentation
- GitHub - PyCQA/flake8: flake8 is a python tool that glues together pycodestyle, pyflakes, mccabe, and third-party plugins to check the style and quality of some python code.
- https://flake8.pycqa.org/en/latest/index.html#quickstart
- https://github.com/pycqa/flake8/blob/main/docs/source/index.rst
- Full Listing of Options and Their Descriptions — flake8 6.1.0 documentation
- Pylint 3.0.0a8-dev0 documentation
- Full Listing of Options and Their Descriptions — flake8 4.0.1 documentation
- Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(1)_pycharm 检查代码规范_SteveRocket的博客-优快云博客
- https://blog.youkuaiyun.com/zhouruifu2015/article/details/129877179
Python专栏
https://blog.youkuaiyun.com/zhouruifu2015/category_5742543
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接
更多精彩,关注我公号,一起学习、成长
标准库系列-推荐阅读:
推荐阅读: