flake8,一个让你的Python代码更漂亮的库

高质量的代码不仅提高了软件的可维护性和可读性,还减少了错误和漏洞,从而提升了软件的可靠性和安全性。

众所周知,PEP 8规范是 Python 社区制定的一份关于代码格式和风格的优秀指南。Flake8 为此而生。

概念

Flake8 是一个广泛使用的 Python 代码质量检查工具,它结合了多个流行的静态代码分析工具,为开发人员提供了全面的代码检查功能。Flake8 的核心组件包括:

  • PyFlakes:检测代码中的错误,例如未使用的变量或未定义的名称。
  • pycodestyle (原名 PEP8):检查代码是否符合 PEP 8,即 Python 的官方编码规范。
  • McCabe:计算代码的圈复杂度,帮助开发人员识别复杂度过高的函数和方法。

为何要装

  • 保持代码的一致性和可读性
  • 发现代码中的潜在错误和问题
  • 让代码遵循 Python 编码规范(PEP 8)

安装和配置

pip安装

pip install flake8

接下来,在项目根目录创建.flake8配置文件,如:

[flake8]
max-line-length = 88
exclude = 
  .git,
  __pycache__,
  old,
  build,
  dist
ignore = E501,W503

上述ini代码配置中:

  • max-line-length = 88表示设置了代码行的最大长度限制为 88 字符。如果代码行超过这个长度,Flake8 将报告一条错误信息。这个值不同于默认的 79 字符,通常是为了与其他工具(如black格式化器)保持一致。
  • exclude这一项指定了 Flake8 在进行代码检查时要排除的目录列表。配置中的这些目录将不会被 Flake8 检查,比如例子就排除了.git__pycache__oldbuilddist这几个目录。
  • ignore = E501,W503则选项用于指定 Flake8 在进行代码检查时应忽略的错误和警告类型。这里忽略了两种特定的错误和警告

检查代码

配置之后,就可以使用flake8进行检查代码质量,

单个文件
flake8 your_script.py
整个项目
flake8 .

其实还可以这样临时指定参数运行,这里命令行参数会覆盖掉上面的.flake8文件里的配置参数

flake8 --ignore=E501,W503 your_script.py

输出解读

在执行完flake8命令后,比如检查这段代码:

def my_function():
    print("Hello, World!")
print("This line is too long, it exceeds the maximum line length recommended by PEP 8.")

我们可能看到类似这样的错误或告警的输出

example.py:3:1: E305 expected 2 blank lines after class or function definition, found 1
example.py:4:80: E501 line too long (86 > 79 characters)

这些错误/告警提示,都是在指导你怎么把代码写的更加PEP 8规范化,提示也是比较明显了。

更多错误可以参考这个PEP 8文档:

https://pep8.readthedocs.io/en/latest/intro.html#error-codes

忽略规则

在 Flake8 中,除了通过在.flake8配置文件中指定文件或文件夹外,它还提供了使用特定的注释来告诉 Flake8 在代码中忽略特定行的检查。这些注释称为 “Flake8 noqa comments”。

在代码中插入 # noqa 注释可以告诉 Flake8 忽略该行的检查。这在某些情况下很有用,例如当你知道某一行违反了规范,但你有充分的理由保留它时(尤其是一些比较急的热修复时)。

全局禁用
# flake8: noqa
import os  # noqa

在这个例子中,# flake8: noqa 告诉 Flake8 忽略整个文件的检查,而 # noqa 注释告诉 Flake8 忽略 import os 这一行的检查。

特定禁用
import os  # noqa: F401

在这个例子中,# noqa: F401 告诉 Flake8 忽略 import os 这一行的 F401 错误(未使用的导入)检查。

注意事项

尽量减少使用 # noqa 注释,它们应该只在确实需要的情况下使用,并且要确保有充分的理由来禁用检查,否则会导致漏检查引发隐藏问题。

集成到工作流

  • 在 IDE/编辑器中集成 Flake8(如 VSCode、PyCharm),这样在写代码的时候就能注意到问题
  • 在 CI/CD 管道中使用 Flake8, 比如在 GitHub Actions 中使用 Flake8
name: Flake8 Lint

on: [push, pull_request]

jobs:
  flake8:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install flake8
      - name: Run Flake8
        run: |
          flake8 .

这样就能保证合并到仓库的代码是统一规范的。

插件

Flake8 还提供了其他优秀插件扩展功能,比如flake8-docstrings可以帮我们进行一些文档字符串检查(如函数/类/模块是否有文档注释等)

总结

Flake8 是 Python 开发中常用的代码质量检查工具,通过集成多个静态分析工具,帮助开发者确保代码符合PEP 8规范,代码更加漂亮优雅,提高可读性和一致性,提高了团队开发的效率。

参考链接

  • flake8 官方文档:https://flake8.pycqa.org/en/latest/index.html#quickstart
  • PEP 8 编码规范:https://wangmeng-python.readthedocs.io/en/latest/readability/PEP8.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值