当前位置: 主页 > Python语言

静态代码检查 python-python 静态代码块

发布时间:2023-02-09 14:18   浏览次数:次   作者:佚名

Flake8是Python官方发布的一款帮助检测Python代码是否规范的工具。 与目前比较流行的Pylint相比,Flake8检查规则灵活,支持附加插件的集成,扩展性强。 Flake8 是对以下三个工具的封装:

1)PyFlakes:静态检查Python代码逻辑错误的工具。

2) Pep8:静态检查PEP8编码风格的工具。

3) NedBatchelder's McCabe:静态分析Python代码复杂度的工具。

Flake8除了封装了以上三个工具,还提供了扩展的开发接口。

官方文档:

安装

下面介绍两种安装方法:

1. 在 Ubuntu 16.04 上安装 Flake8。

易于获取更新

apt-get 安装 python-flake8

2、Windows安装好Python后,打开cmd,输入命令:

python -m pip 安装 flake8

其中,代表的是Python的版本号,可以通过python –v或者python –version查看。

当然你也可以直接按照默认配置安装Flake8:

python 静态代码块_静态代码检查 python_静态代码检查 python

python -m pip 安装 flake8

可以通过flake8 –help 查看是否安装成功。

建议根据Python版本号进行镜像安装。 Windows下,在默认安装形式下做静态代码检查,会检测到一些和Python3冲突的,如下:

指示

文件结构如下:

1、查看指定文件:Flake8 + Python项目名,红框处为Flake8默认配置检测到的问题。

从红框可以看出Flake8检测到了4个错误,分类为H101、H233、F821。 H开头的是安装黑客插件后检测到的错误。 Flake8基本错误返回码分为三种:

E***/W***:PEP8 中的错误和警告。

F***:PyFlakes检测到的错误,其实PyFlakes本身并没有提供错误返回码,flake8对pyflakes返回的错误信息进行了分类。

C9**:McCabe 检测到的代码复杂性。 Flake8提供了一个扩展选项:--max-complexity静态代码检查 python,如果函数的McCabe复杂度高于给定值静态代码检查 python,会发出警告。 此功能对于查找过于复杂的代码非常有用。 根据 Thomas J. McCabe, Sr(Cyclomaticcomplexity 的创始人)的研究,代码复杂度不应超过 10,而 Flake8 官网推荐值为 12。

2.显示具体错误

如果想在静态代码检查中显示工程下的H233具体错误怎么办? 可以通过 flake8 --select 命令来实现:

flake8 -- 选择 H233 shadowtest

如果需要选择以特定类型开头的错误码,eg:以E开头

静态代码检查 python_静态代码检查 python_python 静态代码块

flake8 --选择E shadowtest

如果您需要选择多个特定的错误代码,只需用逗号分隔即可,例如:错误代码 1,错误代码 2。

3.忽略特定的错误代码

静态代码检查忽略H233类型错误,设置多个忽略方法同上

flake8 --忽略 H233 shadowtest

4.忽略特定文件/文件夹

静态代码检查忽略test2.py文件,如上设置多个忽略方法

flake8 --exclude shadowtest/path2/test2.py 阴影测试

静态代码检查忽略path2的整个文件,设置多个忽略的方法同上

flake8 --exclude shadowtest/path2/shadowtest

5.输出修改格式

flake8 --format=%(path)s::%(row)d,%(col)d::%(code)s::%(text)s shadowtest

如果想把代码复杂度设置成其他值,只看几类错误,几个文件夹的内容不用检查,是不是每次检查都要重新输入上面的设置? 解决方法如下:配置文件。

Flake8 支持在配置文件中保存个人设置。 我们可以将配置保存为 setup.cfg、tox.ini 或 .flake8 的形式。

静态代码检查 python_静态代码检查 python_python 静态代码块

以tox.ini为例:

前后输出结果对比:

添加配置前:

添加tox.ini配置后:

如果ignore包含H101,但select也包含H101怎么办?

经测试:select的优先级高于ignore,且两者都包含相同的错误类型,对ignore这种错误类型的检查将被忽略。

如果有多个配置文件怎么办?

可以通过flake8 --config=配置文件工程名来解决。

6、通过setup.py查看项目中所有的python文件

setup.py的相关概念可以参考这篇文章:

7.配置其他

更多Flake8命令参考:flake8 –help

Flake8 的小插件

Flake8相对于其他Python静态代码检查工具的优势在于其良好的可扩展性。 以下是一些比较流行的 Flake8 插件:

静态代码检查 python_静态代码检查 python_python 静态代码块

1.黑客攻击

由于 Python 是 OpenStack 的官方语言,因此根据 OpenStack Style Guidelines 生成 hacking,基于原始的 Google Python Style Guide 和 OpenStack 自己的规则。 黑客官方文档:

插件安装也很简单,通过pip安装hacking,在Windows cmd窗口执行:

python –m pip 安装

安装hacking黑客插件后,会新增一种H开头的错误返回码: H***:hacking返回的错误类型。

hacking中有些错误类型检测默认是关闭的,可以通过命令行或者配置文件修改开关:enable-extensions=H106,H203

2. pep8-命名

鉴于pep8目前还不支持命名约定的检查,所以有人开发了这个插件作为规则的补充。

安装pep8-naming插件后,会新增一种N开头的错误返回码:

N***:pep8-naming 返回的错误类型。

其他插件可以通过命令搜索:pip search flake8,需要的一定有,安装也很简单:pip install 插件名称

先提醒一下几个坑:

规则检查插件之间可能会有重复提示。 如果你想排除一个类别,你的配置文件会变得越来越复杂。 并不是说安装的越多越好,工具不是太多,而是会用的能力。

插件之间可能没有完美的兼容性,尤其是两个新插件。 eg:为了可视化,我在flake8上安装了flake8-chart 0.1.5插件,

python 静态代码块_静态代码检查 python_静态代码检查 python

通过这个插件,将flake8的分析结果转化为图形(只支持饼图和直方图)。

执行以下命令:

flake8 --statistics shadowtest |flake8chart --chart-type=BAR --chart-output=shadow.svg

分析 Jenkins 上的 flake8 报告

在Flake8上安装插件,flake8-junit-report将flake8的报告转化为junit格式,构建完成后可以运行Publish Junit testresult report输出文档:

1.安装flake8-junit-report

2. pip 安装 flake8-junit-report

3、输出Flake8测试报告

4.flake8 --output-file flake8.txt shadowtest

5.将junit测试结果转成xml

6.python -m junit_conversor flake8.txt flake8_junit.xml

7、转成junit.xml报表:

8. 在詹金斯上显示:

以上由网易企业服务-企业信息服务商:湖南领先网络科技有限公司整理发布。

网易企业服务是网易凭借20年的品牌优势和经验打造的企业级产品矩阵,致力于提供一站式企业信息化解决方案。 网易企业服务的推出,是网易在企业邮箱基础上在企业市场的进一步重要布局。 湖南领先网络科技是网易企业产品一级经销商,专业为企业提供一站式信息化解决方案。返回搜狐查看更多