0%

python代码规范利器-Flake8

hello 大家好我是Monday,代码规范不仅能减少bug,有助于代码审查,降低维护成本,更重要的是在大型项目中,能够提升团队间的合作效率,今天给大家带来篇python代码规范利器-Flake8的文章。

一、简介

Flake8 是一款辅助检测Python代码是否规范的工具,它是下面三个工具的封装集合:

  1. PyFlakes
  2. Pep8
  3. NedBatchelder’s McCabe script

Flake8 通过启动单个flake8命令来运行所有工具。它在每个文件的合并输出中显示警告。

二、安装

1
pip install flake8

采坑实录:

1
2
3
4
5
self.headers["User-Agent"] = user_agent()
File "E:\phone_workerspace\anti_python\venv\lib\site-packages\pip\_internal\network\session.py", line 170,
in user_agent
if rustc_output.startswith(b"rustc "):
TypeError: startswith first arg must be str or a tuple of str, not bytes

修改指定错误行如下:

1
if rustc_output.startswith("rustc "):

再次安装:

1
2
3
4
5
6
in __init__
self.headers["User-Agent"] = user_agent()
File "E:\phone_workerspace\anti_python\venv\lib\site-packages\pip\_internal\network\session.py", line 174,
in user_agent
data["rustc_version"] = rustc_output.split(b" ")[1].decode()
TypeError: must be str or None, not bytes

修改指定错误行如下:

1
data["rustc_version"] = rustc_output.split(" ")[1]

ok再次安装成功

三、使用

1
flake8 my_project

你可以在命令行上进行配置,也可以使用配置文件,配置文件可以在最高级的用户目录下,或者当前目录下,setup.cfg,tox.ini, 或者.flake8 文件都可以,文件需要以 [flake8] 段落开头:

1
2
3
4
[flake8]
ignore = D203
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist
max-complexity = 10

—exclude,用来批量检查的时候,忽略指定的文件:

—ignore 也是因为有的时候输出太多,以一些告警信息可能是不需要的,将其忽略:

—max-complexity,代码复杂度检查,通过这个参数设一个阈值,超过的将显示出来,默认是12

如果有多个配置文件的话,可以通过flake8 —config=配置文件项目名称,这种方式解决。

其他配置项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
配置项列表:

count 打印错误总数
diff 仅检查修改的文件并报告 diff 中包含的错误
exclude 排除,使用逗号分隔
filename 检查的文件
format 选择用于向用户显示错误的格式化程序,默认情况下,有两种可用的格式化程序:default 和 pylint
hang-closing 切换 pycodestyle 是否应该强制匹配左括号行的缩进
ignore 要忽略的错误代码列表,默认为E121,E123,E126,E226,E24,E704,W503,W504
extend-ignore 添加到要忽略的错误代码列表,无需完全覆盖默认列表
max-line-length 最大长度
select 希望 Flake8 报告的错误代码列表
extend-select 添加到要报告错误的代码列表,无需完全覆盖默认列表
disable-noqa 报告所有错误,即使它与注释在同一行
show-source 打印生成相关错误/警告的源代码
statistics 计算每个错误/警告代码的出现次数并打印报告
enabled-extensions 启用默认关闭扩展
exit-zero 即使有错误,也强制 Flake8 使用退出状态代码 0
jobs 指定 Flake8 将用于并行运行检查的子进程数
output-file 将所有输出重定向到指定的文件
tee 如果已配置输出文件,还将输出打印到标准输出
append-config 提供额外的配置文件来解析
config 配置文件的路径
isolated 忽略任何配置文件并使用 Flake8
builtins 提供内置函数、对象、名称等的自定义列表
doctests 在 docstrings 中启用 doctests 的 PyFlakes 语法检查
include-in-doctest 指定 PyFlakes 检查哪些文件的 doctest 语法
exclude-from-doctest 指定 PyFlakes 不检查哪些文件的 doctest 语法

四、实测

1
2
flake8 mon_celery_pid.py
mon_celery_pid.py:6:1: F401 'flask.request' imported but unused

他就会把不规范的代码 打印出来

F401 就是不规范的分类编号,如果想要忽略这种错误就在 配置文件里写上

1
ignore = E401

.flake8配置文件写法大致如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[flake8]
ignore = E401,F541,E722,E501
exclude =
# No need to traverse our git directory
bin,
conf,
dayan,
data,
.git,
# There's no value in checking cache directories
__pycache__,
# The conf file is mostly autogenerated, ignore it
docs/source/conf.py,
# The old directory contains Flake8 2.0
old,
# This contains our built documentation
build,
# This contains builds of flake8 that we don't want to check
dist,
test.py
max-complexity = 10
max-line-length = 150

相关阅读

(1)Python PEP8 编码规范中文版

https://www.cnblogs.com/bymo/p/9567140.html#_label0

(2)用flake8检查python代码

https://www.pynote.net/archives/2930

(3)python代码规范利器-Flake8

https://zhuanlan.zhihu.com/p/392178725

结束语

​ 今天的分享就到这里了,欢迎大家关注微信公众号”菜鸟童靴