Ошибка SyntaxError: invalid syntax в Python — что это, почему возникает и как её исправить
Когда внешне всё правильно, но Python отвергает ваш код.


Иллюстрация: Оля Ежак для Skillbox Media
Когда разработчик начинает писать первые программы, он неизбежно будет сталкиваться с проблемами в коде. В Python одна из самых частых ошибок — SyntaxError: invalid syntax. Давайте разберёмся, что она означает, как её исправить и какие меры можно предпринять, чтобы избежать её в будущем.
Что означает ошибка SyntaxError: invalid syntax
SyntaxError: invalid syntax — это сообщение об ошибке, которое в переводе означает «синтаксическая ошибка: неверный синтаксис». Такое сообщение возникает при нарушении базовых правил синтаксиса языка, описанных в документации Python Language Reference. Рассмотрим несколько примеров.
Если в коде пропущены круглые скобки:
# Неправильно ❌
print "Привет"
# Правильно ✅
print("Привет")
Когда пропущено двоеточие после условных операторов:
# Неправильно ❌
if x > 5
print("Больше пяти")
# Правильно ✅
if x > 5:
print("Больше пяти")
Когда операторы используются некорректно. Например, если два арифметических оператора идут подряд без операнда между ними:
# Неправильно ❌
x = 5 + * 2
# Правильно ✅
x = 5 * 2
Если в коде допущены опечатки в ключевых словах:
# Неправильно ❌
whille x < 10:
print(x)
x += 1
# Правильно ✅
while x < 10:
print(x)
x += 1
Когда неверно расставлены отступы. Например, если строки внутри блока if не имеют отступов или они расставлены неправильно:
# Неправильно ❌
if x > 5:
print("Больше пяти")
print("Отступ неверный")
# Правильно ✅
if x > 5:
print("Больше пяти")
print("Отступ правильный")
Помимо перечисленных примеров, ошибка SyntaxError: invalid syntax может возникать во множестве других случаев: при незакрытых кавычках, неправильном использовании операторов присваивания, пропущенных запятых в списках или кортежах, некорректном применении логических операторов, неверном написании имён переменных и так далее. Вам не стоит всё это запоминать — Python сам укажет на ошибку и поможет её найти.
Как исправить ошибку SyntaxError: invalid syntax
Для начала проверьте вашу текущую версию Python — чем она новее, тем более информативные сообщения об ошибках вы будете получать. В версиях 3.10+ сообщение содержит номер строки, позицию и само описание ошибки. В ранних версиях вы можете видеть лишь надпись SyntaxError: invalid syntax.
Прочтите сообщение об ошибке и найдите номер проблемной строки в коде. Обратите внимание на символ ^, который обычно указывает на конкретное место ошибки. Внесите исправления и попробуйте перезапустить код.
👆 Python показывает синтаксические ошибки по одной: когда вы исправите первую ошибку и перезапустите код, то увидите следующую (если она есть).
Посмотрим пример кода с двумя синтаксическими ошибками:
def calculate_sum(a, b)
return a + b
numbers = [1, 2, 3, 4, 5
print(calculate_sum(numbers[0], numbers[1]))
Когда мы запустим код в первый раз, интерпретатор Python укажет на первую ошибку — пропущенное двоеточие после определения функции:

Скриншот: Visual Studio Code / Skillbox Media

Скриншот: Visual Studio Code / Skillbox Media
Запустим код во второй раз и проверим, обнаружит ли интерпретатор незакрытую квадратную скобку в списке numbers:

Скриншот: Visual Studio Code / Skillbox Media

Скриншот: Visual Studio Code / Skillbox Media
Мы разобрали ошибку SyntaxError: invalid syntax на простых примерах, которые легко определить визуально. Однако в реальных проектах даже обновлённые версии интерпретатора не всегда точно указывают место ошибки, поэтому код приходится анализировать вручную по частям.
Если вы не можете решить проблему самостоятельно, попробуйте обратиться за помощью к программистам на специализированных форумах:
- Создайте обращение и объясните, какую задачу должен решать код.
- Добавьте проблемный фрагмент кода (текст, не скриншот).
- Опишите, что вы уже пробовали сделать для исправления ошибки.
После получения ответов от участников форумов попробуйте применить предложенные решения и поделитесь результатами. Это поможет не только вам, но и тем, кто может столкнуться с подобной проблемой в будущем.
Инструменты для профилактики ошибок в Python
Допускать синтаксические ошибки при написании кода — это естественная часть процесса обучения программированию. Не переживайте, если сталкиваетесь с этой проблемой. Вскоре вы научитесь избегать типичных ошибок и использовать инструменты, которые помогут улучшить ваш код.
Расширения для VS Code:
- Python и Pylance — два основных расширения для начала работы. Они добавляют в VS Code базовую поддержку Python и проверку синтаксиса.
- Error Lens — подсвечивает ошибки в коде и делает их более заметными. Рекомендуем устанавливать после освоения базовых расширений.
- IntelliCode — расширение от Microsoft, которое применяет машинное обучение для создания умных подсказок при написании кода.
Инструменты для анализа и форматирования кода:
- Pylint — популярный инструмент для статического анализа кода. Он проверяет ваш код на соответствие стандартам PEP 8, находит потенциальные ошибки и даёт рекомендации по улучшению его качества.
- Pyflakes — быстрый анализатор кода, который специализируется на поиске логических ошибок. Отлично подходит для начинающих разработчиков, поскольку выдаёт понятные сообщения об ошибках.
- Black — автоматический форматтер Python-кода, который помогает поддерживать единый стиль оформления во всём проекте.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!