ホームページ  >  記事  >  バックエンド開発  >  PyLint の長所、短所、危険性

PyLint の長所、短所、危険性

WBOY
WBOY転載
2023-04-10 12:01:031881ブラウズ

PyLint の長所、短所、危険性

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 abstractions"""import attrs@attrs.defineclass Laptop:"""A laptop"""ident: strcpu: str

しかし、PyLint には独自の意見 (おそらく 90 年代に形成された) があるようで、それらを事実として述べるのを躊躇しません:

$ pylint laptop.py | sed -n '/^laptop/s/[^ ]*: //p'R0903: Too few public methods (0/2) (too-few-public-methods)

危険

何百万人もの人々が使用するツールに、根拠のない自分の意見を加えることを考えたことはありますか? PyLint は月間 1,200 万ダウンロードされています。

「こだわりすぎると、人々はチェックを外します」 — これは、2022 年 7 月 3 日に提起された PyLint GitHub 問題 6987 です。

追加の可能性があるものについては、次のとおりです。テストでは多くの偽陽性があり、その態度は...「eh」です。

あなたのために使えるようにしましょう

PyLint は優れていますが、取り扱いには注意が必要です。 PyLint を機能させるために、私が推奨する 3 つのこと:

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 files"""session.install("pip-tools")for deps in [..., "pylint"]:session.run("pip-compile","--extra",deps,"pyproject.toml","--output-file",f"requirements-{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 の長所、短所、危険性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。