Manfaatkan PyLint sepenuhnya.
Pukul papan: PyLint sebenarnya cukup bagus!
"PyLint boleh menyelamatkan nyawa anda" adalah keterlaluan, tetapi tidak seperti yang anda fikirkan. PyLint boleh menyelamatkan anda daripada kecacatan yang sukar dicari dan kompleks. Paling teruk, ia hanya menjimatkan masa berjalan ujian. Pada tahap terbaik, ia membantu anda mengelakkan ralat yang rumit dalam pengeluaran.
Saya malu untuk mengatakan betapa biasa perkara ini. Nama ujian sentiasa sangat pelik: tiada siapa mengambil berat tentang nama itu, dan selalunya nama semula jadi tidak ditemui. Contohnya, kod berikut:
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
Ujian berfungsi:
collected 2 items test.py .. 2 passed
Tetapi inilah perkaranya: jika anda mengatasi nama ujian, rangka kerja ujian dengan senang hati akan melangkau ujian!
Pada hakikatnya, fail ini mungkin mempunyai ratusan baris dan orang yang menambah ujian baharu mungkin tidak mengetahui semua nama. Semuanya kelihatan baik sehingga seseorang melihat dengan lebih dekat pada output ujian.
Bahagian yang paling teruk ialah, tambahan ujian dilindungi, kerosakan yang disebabkan oleh ujian dilindungi, dan masalah tindak balas rantai boleh mengambilnya mungkin mengambil masa berhari-hari, berbulan-bulan atau bahkan bertahun-tahun untuk ditemui.
Seperti rakan baik, PyLint boleh membantu anda.
test.py:8:0: E0102: function already defined line 1 (function-redefined)
Sama seperti sitkom 90an, semakin banyak anda mengetahui tentang PyLint, semakin banyak soalan yang anda perolehi. Berikut ialah kod biasa untuk program pemodelan saham:
"""Inventory abstractions"""import attrs@attrs.defineclass Laptop:"""A laptop"""ident: strcpu: str
Tetapi PyLint nampaknya mempunyai pendapatnya sendiri (mungkin dibentuk pada tahun 90-an) dan tidak takut untuk menyatakannya sebagai fakta:
$ pylint laptop.py | sed -n '/^laptop/s/[^ ]*: //p'R0903: Too few public methods (0/2) (too-few-public-methods)
Pernah terfikir untuk menambah pendapat anda sendiri yang tidak berasas pada alat yang digunakan oleh berjuta-juta orang? PyLint mempunyai 12 juta muat turun setiap bulan.
"Jika anda terlalu memilih, orang akan menyahtanda" — Ini ialah PyLint GitHub isu 6987, dibangkitkan pada 3 Julai 2022
Untuk penambahan yang mungkin Terdapat banyak ujian positif palsu, dan sikapnya ialah... "Hmm".
PyLint bagus, tetapi anda perlu berhati-hati dengannya. Untuk menjadikan PyLint berfungsi untuk anda, berikut ialah tiga perkara yang saya cadangkan:
Sematkan versi PyLint yang anda gunakan untuk mengelakkan sebarang kejutan!
ditakrifkan dalam fail .toml
anda:
[project.optional-dependencies]pylint = ["pylint"]
ditakrifkan dalam kod:
from unittest import mock
Ini sepadan dengan kod berikut:
# 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",)
Lumpuhkan semua semakan, dan kemudian dayakan semakan yang anda fikirkan mempunyai kadar positif palsu yang tinggi. (Bukan sekadar nisbah negatif palsu/positif palsu!)
# 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",)
Inilah dam yang saya suka. Tingkatkan ketekalan projek dan elakkan kesilapan yang jelas.
checkers = ["missing-class-docstring","missing-function-docstring","missing-module-docstring","function-redefined",]
Anda hanya boleh menggunakan bahagian PyLint yang bagus. Jalankannya dalam CI untuk konsistensi dan gunakan pemeriksa biasa.
Lepaskan bahagian buruk: melumpuhkan pemeriksa secara lalai.
Elak bahagian berbahaya: Versi tetap untuk mengelakkan kejutan.
Atas ialah kandungan terperinci Kebaikan, keburukan dan bahaya PyLint. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!