Предупреждение W293 blank line contains whitespace выдают линтеры pycodestyle и flake8, когда на визуально пустой строке Python-файла остались пробелы или символы табуляции. Такая строка выглядит пустой в редакторе, но на самом деле содержит невидимые символы, что нарушает стандарт оформления кода PEP 8.

Ошибка не останавливает выполнение программы — интерпретатор Python игнорирует пробельные символы на пустых строках. Однако линтеры помечают её, потому что невидимый «мусор» засоряет diff при код-ревью, ломает автоматические проверки в CI и затрудняет сопровождение проекта. Ниже разберём, откуда берутся эти пробелы и как убрать их раз и навсегда.

Что означает предупреждение W293

Код W293 относится к семейству предупреждений о пробельных символах (whitespace) в стандарте PEP 8. Линтер сканирует каждую строку файла: если строка не содержит ничего, кроме пробелов или табуляций, она должна быть полностью пустой. Любой «хвост» из невидимых символов считается нарушением.

Типичный вывод линтера выглядит так:

main.py:12:1: W293 blank line contains whitespace

Здесь 12 — номер строки, 1 — позиция символа. Откройте файл, перейдите на указанную строку и включите отображение невидимых символов в редакторе: вы увидите точки или стрелки там, где визуально ничего нет.

Важно не путать W293 с похожими предупреждениями:

  • 🔍 W291 — trailing whitespace: пробелы в конце строки, где есть код;
  • 🔍 W292 — no newline at end of file: отсутствует перевод строки в конце файла;
  • 🔍 W293 — пробелы на строке, которая должна быть пустой;
  • 🔍 E303 — слишком много пустых строк подряд.

Почему на пустых строках появляются пробелы

Наиболее частая причина — автоотступ редактора. Когда вы нажимаете Enter внутри функции, IDE автоматически добавляет отступ на новой строке. Если затем вы уходите с этой строки, не написав код, отступ остаётся — строка становится «пустой с пробелами».

Вторая типичная ситуация — копирование фрагментов кода из браузера, мессенджеров или PDF-документов. Вместе с текстом переносятся неразрывные пробелы и лишние отступы, которые попадают на пустые строки между блоками.

Третий источник — совместная работа в команде, где у разных участников разные настройки редактора: кто-то использует табуляцию, кто-то пробелы, а функция автоматической очистки trailing whitespace включена не у всех.

📊 Как чаще всего W293 появляется в вашем коде?