TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4513 2.25K
Что такое линтер и что он делает

Линтер - это инструмент статического анализа кода, который проверяет ваш код на темы:
🔘 Синтаксис - правильно ли расставлены скобки, двоеточия;
🔘 Импорты - все ли импорты используются;
🔘 Переменные - все ли переменные определены;
🔘 Стиль - соответствие PEP 8;
🔘 Типы - если используется типизация.


Зачем запускать после изменений

⚡️ Обнаружение новых ошибок

# После добавления нового кода
def new_feature():
unused_var = "not used" # Линтер найдет неиспользуемую переменную
return "feature"


⚡️ Проверка совместимости

# После изменения импортов
from new_module import new_function
# Линтер проверит, существует ли new_function


⚡️ Соблюдение стандартов

# После рефакторинга
class MyClass:
def __init__(self):
self.very_long_attribute_name_that_should_be_shorter = None
# Линтер предложит сократить имя


⚡️ Проблемы безопасности

import subprocess
user_input = input("Enter command: ")
subprocess.run(user_input, shell=True) # Линтер предупредит о SQL injection


⚡️ Неэффективный код

# Неэффективно
my_list = []
for i in range(1000):
my_list.append(i)

# Линтер может предложить list comprehension
my_list = [i for i in range(1000)]


Настройка линтера
Обычно линтер настраивается через файлы конфигурации:


# pyproject.toml
[tool.ruff]
line-length = 88 # Максимальная длина строки
target-version = "py38" # Версия Python


Мы можем тонко настраивать, каким именно правилам следовать:

[tool.ruff.lint]
select = ["E", "F", "W", "C90", "I", "N", "UP", "YTT", "S", "BLE", "FBT", "B", "A", "COM", "C4", "DTZ", "T10", "EM", "EXE", "FA", "ISC", "ICN", "G", "INP", "PIE", "T20", "PYI", "PT", "Q", "RSE", "RET", "SLF", "SLOT", "SIM", "TID", "TCH", "INT", "ARG", "PTH", "TD", "FIX", "ERA", "PD", "PGH", "PL", "TRY", "FLY", "NPY", "AIR", "PERF", "FURB", "LOG", "RUF"]
ignore = ["E501", "S101", "PLR0913", "PLR0912", "PLR0915"]



Классические линтеры
🔘Pylint
🔘ruff
🔘Flake8
🔘mypy
🔘black

Пользователи Cursor, возможно, обратили внимание на завтозапуск линтера после практически каждого внесенного изменения. Эта IDE не отдает предпочтения какому-то конкретному инструменту, но запускает несколько из них.

Список правил ruff с детализацией в доках
#основы
@zen_of_python
  • ✍ 2
  • ❤ 1
  • 👍 1
More from @zen_of_python
  1. Sep 25, 2026Почему Python предупреждает о последовательности \477 и как это исправить В строках Python…
  2. Sep 25, 2026Как запускать Python-код в песочнице на MicroPython и WebAssembly В проектах Саймона Уилли…
  3. Sep 25, 2026Как emojet ускоряет работу с эмодзи в Python Библиотека emojet преобразует названия в эмод…
  4. Sep 24, 2026Как читать многострочный ввод в Python REPL несколько раз Вызов open(0).read() читает стан…
  5. Sep 24, 2026Как исправить вызов NamedTuple в Python 3.15 В Python 3.15 больше не поддерживается создан…
  6. Sep 24, 2026Как запустить урезанный Python в браузерной песочнице Monty от Pydantic исполняет небольшо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →