Предупреждение 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 появляется в вашем коде?