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规范,代码更加漂亮优雅,提高可读性和一致性,提高了团队开发的效率。

参考链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容