如何设置pylint分数阈值?

21
我希望能够提取我的Pylint评分并设置阈值。举个例子,如果分数低于5分,我想退出1;如果我的代码评分高于5分,我想退出0并继续我的Jenkins程序。

1
请检查@Gooseman的答案。我认为现在它是最好的答案。 - Alexandre Paes
4个回答

41
自从pylint 2.5.0版本以来,有一个新的参数叫做--fail-under,它可以解决这个问题,而无需使用外部工具或脚本。
在这个例子中,当分数低于8时,pylint将退出并显示错误。
pylint --fail-under=8 python_code.py

2
谢谢大家来到这里学习Gitlab CI,以下是我使用的命令:pylint --fail-under=9 $(git ls-files '*.py') - Bilal
1
pylint v2.11.1使用--fail-under=10参数时不会明显失败吗? - El Dude
@ElDude 默认情况下最高得分为10.0。详见https://pylint.pycqa.org/en/latest/user_guide/output.html#score-section。 - Gooseman
我已经找到了问题所在,但是如果得分小于10,它不会显示失败,只会显示得分。根据文档,需要解析退出值以获得正确的失败信息... - El Dude

8
这里有一种使用Python访问pylint API的方法。以下代码应该被保存到一个文件中,并执行脚本的第一个参数作为要进行静态检测的模块/文件名称:
import sys
from pylint import lint

THRESHOLD = 5

if len(sys.argv) < 2:
    raise ArgumentError("Module to evaluate needs to be the first argument")

run = lint.Run([sys.argv[1]], do_exit=False)
score = run.linter.stats['global_note']

if score < THRESHOLD:
    sys.exit(1)

4

安装

> pip install pylint-fail-under

您可以按如下方式检查阈值

pylint-fail-under --fail_under=6.0 test_pylint_code.py (or path)

如果得分低于6.0,它会返回一条消息:

错误: 得分5.3999999999999995小于6.0的失败下限值

否则,它将返回退出代码0。
官方文档链接为:https://pypi.org/project/pylint-fail-under/

0
fail-under选项对我也没有起作用。所以,我查看了pylint模块代码,并找到了检查分数是否低于fail-under值的逻辑,然后使用不同的数字执行sys.exit:
  • 如果分数高于阈值,则为0
  • 如果分数低于阈值,则为非零。
在这两种情况下,它都会退出而不引发错误或异常;因此,控制台不会输出任何错误。
根据需要修改pylint/lint/run.py文件,以强制在分数低于某个阈值时出现代码失败。
if score_value >= linter.config.fail_under:
    sys.exit(0)
else:
    # We need to make sure we return a failing exit code in this case.
    # So we use self.linter.msg_status if that is non-zero, otherwise we just return 1.
    raise RuntimeError(f"ERROR: score {score_value} is less than fail-under value {linter.config.fail_under}")
    #sys.exit(8)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接