充分利用PyLint。敲黑板:其实PyLint不错!“PyLint可以救你的命”是一个夸张的描述,但并不像你想象的那么夸张。PyLint让您远离非常难以发现和复杂的错误。在最坏的情况下,它只是节省了测试运行时间。充其量,它可以帮助您避免生产中的复杂错误。优点我不好意思说这是多么普遍。测试的命名总是那么奇怪:没有人关心名字,而且通常找不到自然的名字。例如,下面的代码:deftest_add_small():#Math,我说得对吗?assert1+1==3deftest_add_large():assert5+6==11deftest_add_small():assert1+10==11测试生效:collected2itemstest.py..2passed但是问题来了:如果您重写测试的名称,测试框架将很乐意跳过该测试!实际上,这些文件可能有数百行,添加新测试的人可能不知道所有的名字。除非有人仔细查看测试输出,否则一切看起来都很好。最糟糕的是,添加涵盖测试的问题、涵盖测试造成的中断以及连锁反应可能需要数天、数月甚至数年才能发现。PyLint会发现它就像一个好朋友,PyLint可以帮助你。test.py:8:0:E0102:functionalreadydefinedline1(function-redefined)缺点就像90年代的情景喜剧一样,你对PyLint了解得越多,遇到的问题就越多。这是一个库存建模程序的常规代码:"""Inventoryabstractions"""importattrs@attrs.defineclassLaptop:"""Alaptop"""ident:strcpu:str但是PyLint似乎有自己的观点(可能形成于90年代),并且不怕将它们陈述为事实:$pylintlaptop.py|sed-n'/^laptop/s/[^]*://p'R0903:公共方法太少(0/2)(too-few-public-methods)危险数百万人使用的工具?PyLint每月有1200万次下载。“如果太挑剔,人们会取消检查”——这是2022年3月7日的PyLintGitHub问题6987它对添加可能有很多误报的测试的态度是......“嗯”。让它为你工作PyLint很棒,但你需要小心使用它。为了让PyLint为你工作,我推荐以下三件事:1.固定版本固定你使用的PyLint版本以避免任何意外!在你的.toml文件中定义:[project.optional-dependencies]pylint=["pylint"]在代码中定义:fromunittestimportmock这对应于以下代码:#noxfile.py...@nox.session(python=VERSIONS[-1])defrefresh_deps(session):"""Refreshtherequirements-*.txtfiles"""session.install("pip-tools")fordepsin[...],"pylint"]:session.run("pip-compile","--extra",deps,"pyproject.toml","--output-file",f"requirements-{deps}.txt",)2,禁用所有检查默认,然后启用您认为具有高误报率的那些。(不仅仅是假阴性/假阴性比率!)#noxfile.py...@nox.session(python="3.10")deflint(session):files=["src/","noxfile.py"]session.install("-r","requirements-pylint.txt")session.install("-e",".")session.run("pylint","--disable=all",*(f"--enable={checker}"forcheckerincheckers)"src",)3.跳棋以下是我最喜欢的跳棋。提高项目的一致性并避免一些明显的错误。checkers=["missing-class-docstring","missing-function-docstring","missing-module-docstring","function-redefined",]使用PyLint你只能使用PyLint的好的部分。在CI中运行它以保持一致性并使用通用检查器。放弃不好的部分:默认情况下禁用检查器。避免危险部分:固定版本以避免意外。
