Вы написали скрипт, запускаете его, но вместо ожидаемого результата в консоли появляется строка: SyntaxError: invalid syntax («Синтаксическая ошибка: неверный синтаксис»). Так Python сообщает, что синтаксический анализатор обнаружил ошибку и не может разобрать код.
В этой статье мы разберем, что значит invalid syntax и почему возникает эта ошибка, а еще покажем на практических примерах, как исправить синтаксическую ошибку в Python.
Что значит invalid syntax: суть проблемы
В программировании синтаксис — это строгий набор грамматических правил языка. Если вы их нарушаете, интерпретатор не может распарсить вашу инструкцию и выдает syntax error.
Важно: в русскоязычном сообществе из-за автоматического перевода иногда в шутку (или по незнанию) говорят «инвалид синтаксис». Помните, что правильный технический термин — именно «синтаксическая ошибка» или «недопустимый синтаксис Python». Использование корректной терминологии поможет вам быстрее найти решение той или иной проблемы в официальной документации и на форумах.
Почему возникает invalid syntax
Ошибка в синтаксисе редко бывает непонятной. Вот самые частые сценарии, из-за которых код перестает работать:
- Пропущенные двоеточия или скобки. В Python двоеточие ставится обязательно в конце заголовков составных инструкций — например, в строках с i
f, for, while, defиclass.
# Неправильноif x < 2 print("Меньше двух")
# Правильноif x < 2: print("Меньше двух")
- Опечатки в ключевых словах. Например, написание
whilleвместоwhile,retrunвместоreturnилиFalesвместоFalse. - Некорректные отступы. Смешивание табуляций и пробелов может вызвать TabError, если из-за него уровень отступа определяется неоднозначно. Это отдельное сообщение об ошибке, а не
SyntaxError: invalid syntax. - Типографские и похожие символы. Кириллические буквы допустимы в именах переменных, но случайная замена латинской буквы на похожую кириллическую создаст другое имя. Кавычки-«елочки» («») и длинное тире (—), вставленные вместо обычных кавычек и минуса, могут вызвать синтаксическую ошибку.
- Синтаксис Python 2 в Python 3. Например, использование
print "Hello"без скобок вызовет ошибку, так как в третьей версии Pythonprintстал функцией.
Как исправить синтаксическую ошибку в Python: пошаговый алгоритм
Вот четкий алгоритм, как убрать ошибку SyntaxError: invalid syntax и вернуть код к жизни.
1. Читаем трейсбек (вывод интерпретатора)
Современные версии Python (3.10+) стали гораздо умнее. Сообщения о многих синтаксических ошибках стали точнее: интерпретатор лучше выделяет проблемный фрагмент и чаще выводит специализированную подсказку — например, SyntaxError: expected ':'.
2. Проверяем текущую и предыдущую строку
Если указанная строка выглядит идеально, всегда проверяйте строку над ней. Незакрытая скобка, кавычка или пропущенная запятая в предыдущем выражении заставляют Python думать, что инструкция продолжается, и ошибка может быть отмечена на следующей строке.
3. Используем чек-лист быстрой проверки
Неочевидные ловушки
Иногда разработчик уверен, что код написан верно, но он все равно не работает. Python в таких случаях часто становится жертвой «невидимых врагов»:
- Неразрывные пробелы. При копировании кода с некоторых веб-страниц или из документов Word вместо обычного пробела может появиться символ
U+00A0. Вне строкового литерала Python не считает его допустимым пробельным разделителем, поэтому такой символ может вызватьSyntaxError: invalid non-printable character U+00A0. - BOM-маркер. Начальный UTF-8 BOM сам по себе не ломает Python-файл: интерпретатор распознает и игнорирует его. Проблему может создать посторонний символ
U+FEFFвнутри исходного текста или файл, который не удается декодировать в указанной кодировке.
Обнаружить такие проблемы помогают редакторы кода и IDE с режимом отображения невидимых символов, а также сообщения интерпретатора, в которых назван недопустимый символ. К ним относятся:
- Visual Studio Code. Выполните команду View → Toggle Render Whitespace или включите в настройках параметр «editor.renderWhitespace»: «all».
- PyCharm / IntelliJ IDEA. Последовательность команд следующая: View → Active Editor → Show Whitespaces.
- Notepad++. Переходим в раздел Вид → Отображать символы → Отображать пробелы и символы табуляции или Отображать все символы.
- Sublime Text. Здесь последовательность такая: View → Indentation → Draw White Space → All.
- Vim. Выполните команду
:set list(отключить —:set nolist).
Если ошибка вызвана невидимым символом, удалите его или замените обычным пробелом, а затем проверьте кодировку файла. Пересохранение в UTF-8 без BOM не является универсальным решением: начальный UTF-8 BOM Python игнорирует.
Инструменты, которые не допустят появления неправильного синтаксиса
Лучший способ борьбы с синтаксическими ошибками — не допускать их появления. Чтобы быстрее находить SyntaxError: invalid syntax, можно использовать IDE и инструменты статического анализа. Они решают разные задачи: одни показывают диагностические сообщения, другие проверяют код или приводят его к единому стилю.
Среди них можно выделить следующие:
- IDE (PyCharm, VS Code). PyCharm подсвечивает ошибки красной волнистой линией мгновенно. В VS Code установите расширения Pylance и Error Lens, чтобы видеть текст ошибки прямо рядом с проблемной строкой.
- Линтеры (Flake8, Pylint). Эти инструменты анализируют код без его выполнения, проверяют его на соответствие стандарту PEP 8 и находят синтаксические недочеты до запуска программы.
- Форматеры (Black, Ruff). Они приводят отступы, пробелы и другие элементы оформления к единому стилю, но не исправляют синтаксические ошибки. Сначала код должен успешно разбираться анализатором, и только после этого его можно отформатировать.
SyntaxError: invalid syntax в Python — коротко о главном
- Ошибка
SyntaxError: invalid syntaxв Python означает, что синтаксический анализатор обнаружил код, который не соответствует грамматике Python, из-за чего интерпретатор не может его разобрать. - Основные причины сообщения
SyntaxError: invalid syntax— пропущенные двоеточия или скобки, опечатки в ключевых словах, типографские или невидимые символы и конструкции из Python 2, которые не поддерживаются в Python 3. - Как исправить: найдите указатель
^в сообщении об ошибке, проверьте указанную строку и предыдущую на предмет незакрытых конструкций, используйте линтеры для профилактики. - Профилактика: настройте автоматическую проверку синтаксиса в вашей IDE (например, с помощью Pylance или Flake8), а потом подключите линтер и запускайте форматер после исправления синтаксических ошибок.
