如果人们发现你的代码难以使用或理解,你的良好意图可能不会得到预期的结果。Python社区已经正式确定了一些推荐的编程风格,以帮助每个人以一种对共享代码最有意义的共同的、商定的风格编写代码。这种风格在PEP 8中被捕获,即“Python代码的风格指南”。:Pylint是一种快速而简单的方法,可以查看您的代码是否捕获了PEP 8的精髓,因此对其他潜在用户是友好的。
简单一句话就是Pylint可以让你的代码写的更规范,漂亮,可读性高。
安装pylint
很简单,直接pip安装:
直接运行pylint会输出一个简单的帮助列表,以下是我们要关注的几个选项:
如果你需要更多的细节,你也可以要求更长的帮助信息,比如:
请注意这个较长的帮助输出的最后一点。这给了你一个提示,Pylint将选择什么:
你的第一个Pylint操作
我们将使用一个基本的Python脚本作为教程的素材。我们将使用的起始代码名为simplecaesar.py,完整的代码如下:
我们以上面输出的第二行为例,关注一下上面输出的第二行:
上边给出了关于消息符号missing-module-docstring更详细的描述。
下一步
现在我们已经完成了一些配置,让我们看看如何处理剩下的警告。
如果我们添加一个文档字符串来描述代码要做什么,将会有所帮助。然后,我在import行末尾添加了一个不必要的分号,所以我也将修复这个问题。我们稍后会介绍消息。总之,我将在第2行添加一个文档字符串,并删除第三行结尾的分号“;”。
以下是更新后的代码:
下面是运行它时会发生的情况:
好了!Pylint的最后一行告诉我们,自上次运行以来,我们的代码评级提高了多少,我们只剩下消息。
对于诸如实例变量、函数、类等的命名,有定义良好的约定。约定的重点是大写字母和小写字母的使用,以及名称中分隔多个单词的字符。这很适合通过正则表达式进行检查,因此应该匹配正则表达式。
在这种情况下,Pylint告诉我,这些变量看起来是常量,应该都是大写的。这是Pylint从一开始就存在的内部规则。您也可以创建自己的内部命名约定,但出于本教程的目的,我们希望坚持使用PEP 8标准。在这种情况下,我声明的变量应该遵循全部小写的约定。适当的规则类似于:“should match [a-z_][a-z0-9_]{2,30}$”。注意正则表达式中的小写字母(a-z和A-Z)。
如果我们使用选项来运行该规则,现在它将非常安静:
提示:
在命令行上指定regex真的很麻烦,尤其是在我们使用许多其他选项的情况下。这时候我们可以配置Pylint来为我们存储选项,这样我们就不必在命令行中声明它们。使用配置文件是形式化规则并与他人快速共享规则的好方法。调用将创建一个示例rcfile,其中设置了所有选项并附带了注释解释每个选项的含义,关于pylint怎么读取配置文件将在下面说明。
Pylint应该从命令行调用,使用方式如下:
你应该给Pylint一个python包或模块的名称,或者指定多个包或模块。Pylint不会导入这个包或模块,但使用Python内部函数来查找它们,因此与导入包和模块遵循相同的规则和配置。您应该注意您的PYTHONPATH,因为分析模块的已安装版本而不是开发版本是一个常见错误。
也可以分析Python文件,但有一些限制。需要记住的是,Pylint将尝试将文件名转换为模块名,并且只有在成功时才能处理该文件。
上面的代码应该始终可以工作。因为当前工作目录是自动添加到python路径之上的,
上面代码要运行成功,“directory”必须是一个python package(例如,有文件或者是隐式的命名空间包)或者“directory”在python path下
命令行选项
首先,我们有两个基本的(但有用的)选项。
–version
显示pylint的版本号
Pylint是由几个检查器构筑的。你可以通过指定 来禁用一个特定的检查器或者一些消息和消息类型,如果你只想启用某几个检查器或者消息标志,首先使用 禁用all,然后使用,是一个由逗号分隔的检查器名字或者消息标志列表。有关提供的检查器及其功能的描述,请参阅可用特性列表。–disable和–enable选项可用于逗号分隔的列表,混合检查器、消息id和类别,如
每个检查器都有一些特定的选项,可以接受yes/no值、整数、python正则表达式或逗号分隔的值列表(在特殊情况下通常用于覆盖正则表达式)。要获得完整的选项列表,请使用–help
其他有用的全局选项包括:
使用配置文件
前面我们已经说了,在命令行中指定太多的选项配置是很繁琐的,所以我们可以使用配置文件来指定配置,你可以使用–rcfile选项在命令行上指定配置文件,如果不指定,pylint将按照以下顺序搜索配置文件,并使用找到的第一个配置文件:
- 在当前工作目录下的
- 在当前工作目录下的
- 在当前工作目录下的, 前提是它至少有一个 section.
- 在当前工作目录下的, 前提是它至少有一个 section
- 如果当前工作目录在python包里, Pylint搜索Python包的层次结构,直到找到一个文件. 这允许你去指定每个模块的代码标准. 当然,如果一个目录包含一个文件,则该目录被判定为一个Python包.
- 由环境变量命名的文件
- 如果你有一个不是的主目录:
- 在你的home目录下
- 在你的home目录下
并发执行
这将生成4个并行Pylint子进程,其中每个提供的模块将被并行检查。检查程序发现的问题不会立即显示出来。它们在检查模块完成后显示。
在当前实现中并行运行检查有一些限制。不可以使用自定义插件(即选项),也不可能使用初始化钩子(即选项)。
退出码
Pylint返回位编码的退出代码。如果适用,下表列出了相关的stderr流消息输出。
“Error occurred, stopping the linter.”
“<return of linter.help()>”
“Jobs number <#> should be greater than 0”
“<IOError message when trying to open output file>”
输出的默认格式是原始文本。可以通过向pylint传递选项来改变这一点。可能的值有:json, parseable, colorized和msvs (visual studio)。
通过传递一个以逗号分隔的格式列表,可以同时使用多种输出格式。若要更改单个格式的输出文件,请在分号后指定。例如,你可以同时保存一个json报告到somefile和打印一个彩色报告到stdout:
此外,您可以使用选项自定义信息显示的确切方式。格式字符串使用Python的新格式语法,并且可用以下几个字段:
例如,之前版本(1.0之前)的默认格式可以通过以下方式获得:
其他一些例子:
- the default format:
- Visual Studio兼容格式(以前的msvs输出格式):
- 可解析(Emacs和所有,以前的’parseable输出格式)格式:
选项只能与基于文本的报告(可以是未指定的,也可以是:, 或之一)组合。如果同时指定了和,那么选项将优先于报告器类定义的默认行格式。
源码分析部分
对于每个python模块,Pylint将首先显示几个’*'字符,后面跟着模块的名称。然后,一些信息的格式如下:
您可以获得另一种输出格式,这很有用,因为大多数编辑器或其他开发工具使用——output-format=parseable选项可以识别这种格式。
消息类型可以是以下几种:
- [I]nformational messages that Pylint emits (do not contribute to your analysis score)
- [R]efactor for a “good practice” metric violation
- [C]onvention for coding standard violation
- [W]arning for stylistic problems, or minor programming issues
- [E]rror for important programming issues (i.e. most probably bug)
- [F]atal for errors which prevented further processing
有时,导致错误的代码行会显示一个指向错误的插入符号。这可能会在Pylint的未来版本中得到推广。
例如:
Reports部分
- the number of processed modules
- for each module, the percentage of errors and warnings
- the total number of errors and warnings
- percentage of classes, functions and modules with docstrings, and a comparison from the previous run
- percentage of classes, functions and modules with correct name (according to the coding standard), and a comparison from the previous run
- a list of external dependencies found in the code, and where they appear
Score部分
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/6791.html