充分利用 pylint。
敲黑板:pylint 实际上很好!
“pylint 可以拯救你的生命”,这是一句夸张的描述,但没有你想象的那么夸张。pylint 可以让你远离非常难找到的和复杂的缺陷。最差的情况下,它只可以节省测试运行的时间。最好的情况下,它可以帮你避免生产环境中复杂的错误。
优点我不好意思说这种情况是多么普遍。测试的命名总是那么奇怪:没有人关心这个名称,而且通常也找不到一个自然的名称。例如以下代码:
def test_add_small():# math, am i right?assert 1 + 1 == 3def test_add_large():assert 5 + 6 == 11def test_add_small():assert 1 + 10 == 11
测试生效:
collected 2 items test.py .. 2 passed
但问题是:如果你覆盖了一个测试的名称,测试框架将愉快地跳过这个测试!
实际上,这些文件可能有数百行,而添加新测试的人可能并不知道所有的名称。除非有人仔细查看测试输出,否则一切看起来都很好。
最糟糕的是,被覆盖测试的添加、被覆盖测试造成的破坏,以及连锁反应的问题可能要几天、几月甚至几年才能发现。
pylint 会找到它就像一个好朋友一样,pylint 可以帮助你。
test.py:8:0: e0102: function already defined line 1 (function-redefined)
缺点就像 90 年代的情景喜剧一样,你对 pylint 了解的越多,问题就越多。以下是一个库存建模程序的常规代码:
inventory abstractionsimport attrs@attrs.defineclass laptop:a laptopident: strcpu: str
但 pylint 似乎有自己的观点(可能形成于 90 年代),并且不怕把它们作为事实陈述出来:
$ pylint laptop.py | sed -n '/^laptop/s/[^ ]*: //p'r0903: too few public methods (0/2) (too-few-public-methods)
危险有没有想过在一个数百万人使用的工具中加入自己未证实的观点?pylint 每月有 1200 万次下载。
“如果太挑剔,人们会取消检查” — 这是 pylint github 的 6987 号议题,于 2022 年 7 月 3 号提出
对于添加一个可能有许多误报的测试,它的态度是 ... “嗯”。
让它为你工作pylint 很好,但你需要小心地与它配合。为了让 pylint 为你工作,以下是我推荐的三件事:
1、固定版本固定你使用的 pylint 版本,避免任何惊喜!
在你的 .toml 文件中定义:
[project.optional-dependencies]pylint = [pylint]
在代码中定义:
from unittest import mock
这与以下代码对应:
# noxfile.py...@nox.session(python=versions[-1])def refresh_deps(session):refresh the requirements-*.txt filessession.install(pip-tools)for deps in [..., pylint]:session.run(pip-compile,--extra,deps,pyproject.toml,--output-file,frequirements-{deps}.txt,)
2、默认禁止禁用所有检查,然后启用那些你认为误报比率高的。(不仅仅是漏报/误报的比率!)
# noxfile.py...@nox.session(python=3.10)def lint(session):files = [src/, noxfile.py]session.install(-r, requirements-pylint.txt)session.install(-e, .)session.run(pylint,--disable=all,*(f--enable={checker} for checker in checkers)src,)
3、检查器以下是我喜欢的检查器。加强项目的一致性,避免一些明显的错误。
checkers = [missing-class-docstring,missing-function-docstring,missing-module-docstring,function-redefined,]
使用 pylint你可以只使用 pylint 好的部分。在 ci 中运行它以保持一致性,并使用常用检查器。
放弃不好的部分:默认禁止检查器。
避免危险的部分:固定版本以避免意外。
以上就是pylint 的优点、缺点和危险的详细内容。