Pylint的使用记录

简介: 如题。

最近做一个新功能,敲代码的过程中,有想法将代码敲的好看一些。于是在快完成的时候,使用pylint给代码打打分。


使用pylint的默认配置检查结果如下:

Your code has been rated at -17.35/10

没错,负分!就是负分!我看其中报的最多的是以下几种。

C:314, 1: Variable name "xxData" doesn't conform to snake_case naming style (invalid-name)
命名不符合snake_case规范。项目标准,统一风格。

E:815, 4: Undefined variable 'XXX' (undefined-variable)
未定义变量。项目全局变量。

W:880, 0: Found indentation with tabs instead of spaces (mixed-indentation)
使用了tab代替空格,但这还是我们项目标准,风格统一就好。

能否将上面这些项目检查去掉后,再进行一次评分呢?

# 首先使用pylint生成一份默认的配置文件
pylint --generate-rcfile > myrc.pylintrc

将myrc.pylintrc中进行一次查找替换,将snake_case替换为camelCase(不确定camelCase是否正确,需要确认一番)。
在测试最后,看到注释中的文件名称被提示

C: 1, 0: Module name "xx_xxx" doesn't conform to camelCase naming style (invalid-name)

我知道,我是拼正确了的。哈哈。

再使用指令

pylint --rcfile myrc.pylintrc gift_center.py

得到如下结果:

Your code has been rated at -12.07/10 (previous run: -17.35/10, +5.28)

snake_case规范的报错都不再有,但是未定义变量依然占大头,继续找寻办法,将其干掉。在myrc.pylintrc中看见这么一段

# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once).You can also use "--disable=all" to
# disable everything first and then reenable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
disable=print-statement,
        parameter-unpacking,
        ...
        undefined-variable,      # 这一句是我新加的
        mixed-indentation,       # 这一句还是我新加的

忽然灵光一闪,似乎每一句检测结果后面都有一个小括号包起来的小写单词的,是否我将其加入到这里面就ok了呢?于是重新跑一遍,得到一个新的结果

Your code has been rated at -1.57/10 (previous run: -12.07/10, +10.49)

将disable中再加入mixed-indentation跑一遍。哈哈哈,新的评分,已经变成正的了。

Your code has been rated at 6.98/10 (previous run: -1.57/10, +8.55)

此时报错已经少了许多,但是输出的开头有许多此种报错。

C: 15, 0: Wrong hanging indentation (add 3 spaces).

搜索了一下,还是缩进是tab的原因,于是再修改一下。

# Number of spaces of indent required inside a hanging  or continued line.
indent-after-paren=4
# String used as indentation unit. This is usually "    " (4 spaces) or "\t" (1
# tab).
indent-string='    '

改为如下样式

indent-after-paren=1
indent-string='\t'

分数增加一些,报错数量减少。

C:190, 0: Wrong hanging indentation (add 7 spaces).

Your code has been rated at 7.22/10 (previous run: 6.98/10, +0.25)

应该是改对了地方,查看了一下报问题的代码位置。

# C: 15, 0: Wrong hanging indentation (add 3 spaces).
TABLE_NAME = {
  "1": "xx",            # line no: 15
  # ...
# C:190, 0: Wrong hanging indentation (add 7 spaces).
  data = {
    "id": xxId,       # line no: 190
  # ...

经过几次尝试之后,发现与indent-string无关,只是由indent-after-paren所报出来。好像报错中的(add 3 spaces)中的3,是缩进空格数 - 设定值。

啊,不知道具体为啥?先将这个问题放放,将一行文件大小改为160(默认为100)重跑一次。

# Maximum number of characters on a single line.
max-line-length=160

分数有点小小变化

Your code has been rated at 7.48/10 (previous run: 6.98/10, +0.51)

再剩下的最多的报错就是

C:854,14: More than one statement on a single line (multiple-statements)

来源于如下格式,但这种是我个人习惯哦,项目中并没有统一风格。

def func():

   # ...

    if a == b: return'equal'

于是暂时将它也去掉,干掉之后的得分来到

Your code has been rated at 8.07/10 (previous run: 7.48/10, +0.59)

再干掉一个,并不需要每一个函数都添加docstring的。

C:477, 0: Missing function docstring (missing-docstring)

分数来到

Your code has been rated at 8.35/10 (previous run: 8.24/10, +0.11)

剩下的内容,除了Wrong hanging indentation之外,就都是需要修改的内容。好,让我来改一下。

C:920, 4: Do not use len(SEQUENCE) to determine if a sequence is empty (len-as-condition)

不要使用len(seq)作为是否为空的判定,相关问题的讨论

C: 5, 0: standard import "import json" should be placed before "from xx.xxx import xx_method" (wrong-import-order)

改改import顺序。

E: 5, 0: Unable to import 'xx.xx' (import-error)

这个是项目的,不管哦。

改完后的分数来到

Your code has been rated at 8.66/10 (previous run: 8.35/10, +0.00)


上面那个缩进的,我觉得没什么问题,于是在disable选项中,再添加一项。最终的disable选项中添加内容

disable=print-statement,
        parameter-unpacking,
        ...
        undefined-variable,         # 项目变量
        multiple-statements,        # 一行多语句
        missing-docstring,          # 函数说明,""" """中的内容
        import-error,               # 找不到的import
        bad-continuation            # 缩进相关

最终评分为

Your code has been rated at 9.78/10 (previous run: 9.77/10, +0.02)


还有点小得意,去除掉项目风格相关检查后,需要我改的内容不太多呢?

相关文章
|
4月前
|
数据采集 JSON 数据可视化
ydata_profiling:自动生成数据探索报告的Python库
ydata_profiling:自动生成数据探索报告的Python库
|
7月前
|
安全
Doxygen常用语法与字段记录
【代码】Doxygen常用语法与字段记录。
70 0
Doxygen常用语法与字段记录
|
7月前
|
程序员
SourceCount代码统计工具使用
SourceCount代码统计工具使用
108 0
|
7月前
|
JavaScript
ESLint 使用记录
ESLint 使用记录
36 0
代码统计插件statistic
代码统计插件statistic
77 0
vscode 编辑 makefile 文件,执行make操作时显示“Makefile:5: *** 遗漏分隔符 。 停止。“(终极解决办法)
vscode 编辑 makefile 文件,执行make操作时显示“Makefile:5: *** 遗漏分隔符 。 停止。“(终极解决办法)
|
存储 数据可视化 Java
NVRAM Editor 工具使用记录
NVRAM Editor 工具使用记录
480 0
|
小程序 C# Python
【优化】C#小程序集成实现python定时段批量下载电子邮箱附件的bug排除
【优化】C#小程序集成实现python定时段批量下载电子邮箱附件的bug排除
122 0
Kam
|
前端开发 easyexcel Java
EasyExcel导出使用记录:
EasyExcel导出
Kam
321 0
OFFICE拼写语法检查:全部忽略、全部更正的功能
OFFICE拼写语法检查:全部忽略、全部更正的功能
136 0