Python代码扫描:提升Python代码质量的神器-pylint详解与使用指南

目录

介绍

pylint的特点

安装&配置

使用案例

命令行参数

忽略某个文件不进行检查

忽略文件中执行类型(C,R,W,E,F)不进行检查

忽略文件中某个函数执行类型(C,R,W,E,F)不进行检查

忽略文件中某个类执行类型(C,R,W,E,F)不进行检查

忽略no-member的提示

在命令行中使用pylint: disable=W

配置文件配置

对整个项目扫描

pylint的应用场景

参考文档


注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料将在公众号CTO Plus发布,请关注公众号:CTO Plus

Python作为一种简单易学且功能强大的编程语言,吸引了越来越多的我们。然而,由于Python的灵活性和宽松的语法规则,代码质量的控制成为一个挑战。为了解决这个问题,我将介绍一个受欢迎的工具-pylint,它可以帮助我们提升Python代码的质量。

pylint是一个Python代码检查工具,它可以静态分析Python代码并发现潜在的问题。它不仅可以检查代码的语法错误,还可以检查代码的风格、命名规范、代码复杂度等方面的问题。pylint基于PEP 8规范和其他最佳实践,提供了一系列的规则来评估代码的质量,并给出相应的建议和修复方法。

本篇文章《Python代码扫描:提升Python代码质量的神器-pylint详解与使用指南》属于【Python代码规范与扫描】系列内容的第四篇,前面三篇可以根据自己情况自行查阅,同时欢迎公众号CTO Plus后续的文章:

代码规范与静态扫描系列内容:

  1. 企业级Python代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码自动编排介绍
  2. 通读Python PEP8代码规范
  3. Python代码扫描:新一代 Python Linter工具Ruff
  4. Python代码扫描:提升Python代码质量的神器-pylint详解与使用指南
  5. Python代码扫描:轻量级Python静态代码分析工具pyflakes
  6. Python代码扫描:Python代码规范与错误检查的利器-flake8详解与实践
  7. Python代码扫描:静态类型检查的最佳选择mypy
  8. Python代码扫描:自动化移除Python代码中的冗余-autoflake使用技巧与实例
  9. Python代码扫描:Python代码格式化的利器-yapf详解与最佳实践
  10. Python代码扫描:一键格式化Python代码的黑魔法-black使用教程
  11. Python代码扫描:导入语句自动排序工具-isort使用指南与示例
  12. Python代码扫描:自动化修复Python代码风格的工具-autopep8详解与实例
  13. Python代码扫描:项目中的代码规范与错误检查-pyproject-flake8配置与使用方法
  14. Python代码扫描:企业级代码代码安全漏洞扫描Bandit

介绍

Pylint 是一个Python代码分析工具,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8)规范和常见错误的库,比如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等,如果写的代码不符合 PEP-8编码规范,它就会给我们报错。它在一些流行的编辑器和 IDE 中都有集成,也可以单独从命令行运行。

可以通过修改 pylint 的配置文件,修改它检查的方式,从而使它遵守其他的编码规范,比如可以强行让变量名函数名都变成驼峰命名法。使用 Pylint 方便团队形成统一的编码规范。

pylint的特点

pylint具有以下几个特点:

1. 丰富的规则集:pylint提供了大量的规则,涵盖了代码风格、命名规范、代码复杂度等方面的问题。我们可以根据自己的需求选择合适的规则进行检查。

2. 可自定义的规则:pylint支持自定义规则,我们可以根据项目的需求定义自己的规则,以满足特定的代码质量要求。

3. 详细的报告:pylint生成详细的报告,包括每个问题的描述、位置和建议的修复方法。这些报告可以帮助我们快速定位和解决代码中的问题。

4. 易于集成:pylint可以与其他工具集成,如编辑器、持续集成系统等。它可以在代码编写的过程中实时检查代码,并在提交代码前进行检查,以确保代码的质量。

安装&配置

接下来我们开始安装pylint,可以通过pip命令安装pylint,如下所示:

pip install pylint

  1. Pycharm中设置

Arguments:$FilePath$

  1. Pycharm中指定配置文件方式

  1. Pycharm中添加参数屏蔽自定类型的检查

disable=W,E,R,C

使用案例

运行 pylint [options] path/to/dir 或者 pylint [options] path/to/module.py 就可以在命令行中使用 Pylint,它会向控制台输出代码中违反规范和出现错误的地方。

还可以使用 pylintrc 配置文件来自定义 Pylint 对哪些代码错误进行检查。

命令行参数

  1. -h, –help

显示所有帮助信息。

  1. --generate-rcfile

可以使用 pylint --generate-rcfile 来生成一个配置文件示例。可以使用重定向把这个配置文件保存下来用做以后使用。

pylint --generate-rcfile > pylint.conf

  1. --rcfile=<xx.conf>

指定一个配置文件运行pylint。把使用的配置放在配置文件中,这样不仅规范了自己代码,也可以方便地和别人共享这些规范。

pylint --rcfile=pylint.conf dw.py

  1. --reports=<y_or_n>

默认是 n, 表示 Pylint 的输出中除了包含源代码分析部分,也包含报告部分。

pylint --rcfile=pylintrc.conf --reports=y main.py

报告中安装上述的格式生成检查结果,W代表生成的检查级别,级别分为4种:error, warning, refactor, convention;可以根据首字母来对应相应的级别。“10, 0” 代表告警所在源码文件中的行号和列号。“Unused import help"表述问题的详细信息。”(unused-import)为问题的消息ID信息。

下面的信息是按照消息的类别进行分类,对4种级别的告警信息进行汇总:

  1. --help-msg=

获取告警帮助信息。

如需对某告警类型获取帮助信息,可以使用"pylint --help-msg "命令来获取:

pylint --help-msg=C0114

在输出中包含 message 的 id, 然后通过 pylint --help-msg=来查看这个错误的详细信息,这样可以具体地定位错误。

  1. --output-format=

设置输出格式。可以选择的格式有 text, parseable, colorized, msvs (visual studio) , 默认的输出格式是 text。

pylint --output-format=msvs external.py

  1. xx.txt

将每个 module /package 的 message 输出到一个以 pylint_module/package.txt命名的文件中,如果有 report 的话,输出到名为 pylint_global.[txt|html] 的文件中。默认是输出到屏幕上不输出到文件里。

pylint --output-format=msvs external.py > test.txt

Pylint的输出

Pylint的默认输出格式是原始文本(raw text)格式 ,可以通过-f ,--output-format= 来指定别的输出格式如html等等。在Pylint的输出中有如下两个部分:源代码分析部分和报告部分。

源代码分析部分:

对于每一个 Python 模块,Pylint 的结果中首先显示一些"*"字符 , 后面紧跟模块的名字,然后是一系列的 message, message 的格式如下:

MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE

MESSAGE_TYPE 有如下几种:

(C) 惯例。违反了编码风格标准

(R) 重构。写得非常糟糕的代码。

(W) 警告。某些 Python 特定的问题。

(E) 错误。很可能是代码中的错误。

(F) 致命错误。阻止 Pylint 进一步运行的错误。

忽略某个文件不进行检查

对external.py不检查,在文件中设置: # pylint: skip-file

# pylint: skip-file

from pysdk.first_layer import BaseLayer

class Events(BaseLayer):

    def __init__(self):

        # pylint: disable=C0115

        super(Events, self).__init__()

class Metrics(BaseLayer):

    def __init__(self):

        super(Metrics, self).__init__()

忽略文件中执行类型(C,R,W,E,F)不进行检查

external.py’W’类型不检查,在文件中设置: # pylint: disable=W

# pylint: disable=W

from pysdk.first_layer import BaseLayer

class Events(BaseLayer):

    def __init__(self):

        super(Events, self).__init__()

class Metrics(BaseLayer):

    def __init__(self):

        super(Metrics, self).__init__()

忽略文件中某个函数执行类型(C,R,W,E,F)不进行检查

external.py’W,R,E’类型不检查,在文件中类下函数或普通函数下设置: # pylint: disable=W,E,R

from pysdk.first_layer import BaseLayer

class Events(BaseLayer):

    def __init__(self):

        # pylint: disable=W,R,E

        super(Events, self).__init__()

    def __init__(self):

        super(Events, self).__init__()

class Metrics(BaseLayer):

    def __init__(self):

        super(Metrics, self).__init__()

忽略文件中某个类执行类型(C,R,W,E,F)不进行检查

external.py’W,R,E’类型不检查,在文件中类下面设置: # pylint: disable=C,F,W,E,R

from pysdk.first_layer import BaseLayer

class Events(BaseLayer):

    # pylint: disable=C,R,W,E,F

    def __init__(self):

        super(Events, self).__init__()

    def __init__(self):

        super(Events, self).__init__()

class Metrics(BaseLayer):

    def __init__(self):

        super(Metrics, self).__init__()

忽略no-member的提示

代码处修改 # pylint: disable=no-member

pylint --disable=no-member ...

在命令行中使用pylint: disable=W

  1. 不禁用指定类型

pylint + 目标项目或者文件

编写测试代码文件

执行pylint

执行结果

如果对代码进行规范整改,对整改后的代码再次扫描,则会看到无任何检测状态,评分为10份

或命令行中执行pylint pylint_test.py

  1. 禁用W类型

pylint --disable=W external.py

配置文件配置

在项目根目录下生成配置文件pylintrc.conf

pylint --generate-rcfile > pylintrc.conf

pylint --persistent=n --generate-rcfile > pylintrc.conf

  1. 携带配置文件,针对单个文件的扫描

pylint --rcfile=pylintrc.conf manage.py

  1. 对指定项进行disable

配置禁止warning,配置禁止检查指定项

pylint的几种状态:Error(错误) Warning(警告) Refactor(重构) Convention(规范)

--disable=W,E,R,C

--disable=E,R,C

--disable=E,R

对R0801项进行disable之后,再次扫描则会看到不会再输出不符合的结果

  1. pylint设置每行检测字符数

针对每行字符数的修改,默认100

注意:重命名pylint.conf.pylintrc,即不需要每次执行都带上--rcfile参数。

对整个项目扫描

在项目根目录下右击选择pylint执行

使用pylint有如下几种提示级别Error(错误)、Warning(警告)、Refactor(重构)、Convention(规范)。

输出的结果包括:与规范冲突的位置(行列)、违反的规范编号以及具体的内容提示,会针对检测结果给出一个评分,总分10分。

从检查信息可以看到,上述代码缺少模块注释(Missing module docstring)以及函数注释(Missing function docstring),函数名不符合蛇形命名规范(全由小写字母和下划线组成,在两个单词之间用下滑线连接)等。

pylint的应用场景

pylint可以在许多项目中应用,特别是在大型项目和团队协作中。以下是pylint的一些应用场景:

1. 代码规范:对于遵循PEP 8规范的项目,pylint可以帮助我们检查代码的风格是否符合规范,并提供相应的修复建议。

2. 代码质量:pylint可以帮助我们检查代码中的一些常见问题,如未使用的变量、未使用的导入和重复的代码等,以提高代码的质量和可维护性。

3. 团队协作:在团队协作中,pylint可以帮助我们统一代码风格和质量标准,以提高代码的一致性和可读性。

4. 持续集成:在持续集成环境中,pylint可以作为一个检查步骤,帮助我们在代码提交前发现问题,以避免将错误的代码合并到主分支。

参考文档

  1. 官方文档:http://pylint.pycqa.org/en/latest/user_guide/output.html
  2. pylint:https://pylint.readthedocs.io/en/latest/user_guide/usage/run.html
  3. Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(1)_pycharm 检查代码规范_SteveRocket的博客-CSDN博客
  4. https://blog.csdn.net/zhouruifu2015/article/details/129877179

Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


更多精彩,关注我公号,一起学习、成长

关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzIyMzQ5MTY4OQ==&mid=2247484278&idx=1&sn=2b774f789b4c7a2ccf10e465a1b9def6&chksm=e81c2070df6ba966026fd7851efa824b5e2704e3fd34e76228ca4ce64d93f7964cd4abe60f2b#rd

标准库系列-推荐阅读:


推荐阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值