Содержание
  1. Что означает SyntaxError: invalid syntax
  2. Частые причины с примерами «ошибка → фикс»
  3. Таблица: симптом → причина → фикс
  4. Как читать трейсбек SyntaxError
  5. Алгоритм локализации ошибки
  6. Как избежать ошибки заранее
  7. FAQ
  8. Заключение
ГайдыОбновлено · 07.2026

Python: разбираемся с ошибкой SyntaxError: invalid syntax

6 мая 2024 · 6 минут чтения

Коротко. Ошибка SyntaxError: invalid syntax означает, что интерпретатор Python не смог разобрать код: нарушено грамматическое правило языка. Программа не запускается вообще. Причина почти всегда механическая — пропущенное двоеточие, незакрытая скобка или кавычка, = вместо ==, лишняя запятая. Ниже — все частые причины с примерами «ошибка → фикс», таблица-шпаргалка и разбор трейсбека.

Что означает SyntaxError: invalid syntax

Синтаксические ошибки возникают до выполнения программы, на этапе разбора (парсинга) исходного кода. В отличие от ошибок времени выполнения (ValueError, TypeError) ни одна строка не успевает отработать: Python сначала читает весь файл, строит грамматическую структуру и только потом запускает. Если структура нарушена — интерпретатор останавливается и печатает трейсбек со стрелкой на месте, где он «запутался».

Важный нюанс: место со стрелкой — это точка, где парсер обнаружил проблему, а не всегда та строка, которую нужно править. Часто реальная ошибка находится строкой выше. Это официально отмечено в документации Python: «Note that this is not always the place that needs to be fixed».

Частые причины с примерами «ошибка → фикс»

1. Пропущено двоеточие после if / for / while / def

Блочные конструкции требуют двоеточия в конце заголовка. В Python 3.10+ подсказка стала точнее — expected ':', но на старых версиях это классический invalid syntax.

# Ошибка
if x > 5
    print("больше пяти")

# Фикс
if x > 5:
    print("больше пяти")

2. Присваивание = вместо сравнения ==

Внутри условия нужно сравнение (==), а не присваивание (=). Современный Python даже подсказывает: «Maybe you meant ‘==’ instead of ‘=’?».

# Ошибка
if x = 5:
    print("равно пяти")

# Фикс
if x == 5:
    print("равно пяти")

3. Незакрытая скобка

Если открывающих скобок больше, чем закрывающих, парсер доходит до конца файла и падает. Стрелка нередко указывает на следующую строку — реальная причина выше.

# Ошибка
total = sum([1, 2, 3, 4
print(total)

# Фикс
total = sum([1, 2, 3, 4])
print(total)

4. Незакрытая кавычка

Строку нужно закрыть той же кавычкой, что и открыли. Часто сопровождается сообщением unterminated string literal или EOL while scanning string literal.

# Ошибка
name = "Иван
print(name)

# Фикс
name = "Иван"
print(name)

5. print как в Python 2

В Python 2 print был инструкцией, в Python 3 — это функция, и аргумент передаётся в скобках. Код из старых учебников выдаёт ошибку.

# Ошибка (синтаксис Python 2)
print "Привет, мир!"

# Фикс (Python 3)
print("Привет, мир!")

6. Зарезервированное слово как имя переменной

Ключевые слова языка (class, for, import, return, def, lambda и др.) нельзя использовать как имена переменных.

# Ошибка
class = "Python"

# Фикс
class_name = "Python"

7. Опечатка в ключевом слове

Парсер не узнаёт whille, fro, improt — и трактует строку как недопустимую.

# Ошибка
whille i < 10:
    i += 1

# Фикс
while i < 10:
    i += 1

8. Лишняя или пропущенная запятая

В списках, кортежах и аргументах функций элементы разделяются запятыми. Пропуск между элементами (или лишний оператор) ломает разбор.

# Ошибка — нет запятой между элементами
colors = ["red" "green", "blue"]

# Фикс
colors = ["red", "green", "blue"]

9. Два оператора подряд без операнда

Выражение вида 5 + * 2 не имеет операнда между + и * — грамматика нарушена.

# Ошибка
result = 5 + * 2

# Фикс
result = 5 + 2   # или 5 * 2

10. Отступы (родственная ошибка)

Формально неверный отступ даёт IndentationError (подкласс SyntaxError), но новички часто путают её с invalid syntax. Правило: внутри одного блока отступ одинаковый, не смешивайте табы и пробелы.

# Ошибка — блок без отступа
def greet():
print("Привет")

# Фикс
def greet():
    print("Привет")

Таблица: симптом → причина → фикс

Симптом в трейсбеке Вероятная причина Что сделать
Стрелка на print или на начале строки после if/for/def Пропущено двоеточие в конце предыдущей строки Добавить : в конец заголовка блока
Maybe you meant '==' = вместо == в условии Заменить на ==
Стрелка в конце файла / на следующей строке Незакрытая скобка ( [ { Сбалансировать скобки строкой выше
unterminated string literal Незакрытая кавычка Закрыть строку той же кавычкой
Ошибка на print "..." Синтаксис Python 2 Обернуть аргумент в скобки: print(...)
Стрелка на = при присваивании Слева стоит ключевое слово Переименовать переменную
unexpected indent / expected an indented block Неверный отступ Выровнять блок, не смешивать табы и пробелы

Как читать трейсбек SyntaxError

Анатомия трейсбека SyntaxError: что означает каждая строка вывода
Анатомия трейсбека SyntaxError: что означает каждая строка вывода

Разбор ошибки занимает секунды, если читать трейсбек по частям. Пример вывода Python:

  File "main.py", line 3
    while True print('Hello')
               ^^^^^
SyntaxError: invalid syntax

Здесь main.py — файл, line 3 — строка, стрелки ^^^^^ — токен, на котором парсер споткнулся. Реальная причина — пропущенное двоеточие перед print.

Алгоритм локализации ошибки

Пошаговый поиск причины invalid syntax
Пошаговый поиск причины invalid syntax

Если причина не очевидна с первого взгляда, действуйте по шагам — от строки в трейсбеке к строке выше.

ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
  • Где и как применять? Потестируем модель после установки на разных задачах
  • Как дообучить модель под себя?

Как избежать ошибки заранее

  • Редактор с подсветкой синтаксиса. VS Code, PyCharm или Jupyter подсвечивают незакрытые скобки и парные кавычки ещё до запуска.
  • Линтеры. Flake8, Pylint и Ruff находят синтаксические огрехи и опечатки статически; Black автоформатирует код и обнажает структурные проблемы.
  • Запуск по частям. В большом файле комментируйте блоки и запускайте фрагментами — так вы быстро сузите зону поиска.
  • Проверка версии. Команда python --version: код на новом синтаксисе (f-строки, match) на старом интерпретаторе даст invalid syntax.

FAQ

Почему стрелка указывает не на ту строку, где ошибка?

Парсер помечает место, где обнаружил нарушение грамматики, а не то, что надо править. Классика — пропущенное двоеточие: стрелка встаёт на следующий токен. Всегда проверяйте строку выше указанной.

Чем SyntaxError отличается от IndentationError?

IndentationError — это подкласс SyntaxError, отвечающий именно за отступы. Сообщения unexpected indent и expected an indented block относятся к нему. Остальные структурные нарушения дают общий invalid syntax.

Почему print «текст» выдаёт ошибку?

Это синтаксис Python 2, где print — инструкция. В Python 3 это функция, аргумент передаётся в скобках: print("текст").

Код работал у автора учебника, а у меня падает — почему?

Скорее всего разные версии Python. Новые конструкции (f-строки с =, оператор match, walrus :=) не разбираются старым интерпретатором и дают invalid syntax. Проверьте версию и синтаксис.

Как быстро найти незакрытую скобку в большом файле?

Поставьте курсор на скобку в редакторе — он подсветит парную. Если пары нет, скобка не закрыта. Линтер (Flake8, Ruff) укажет строку с дисбалансом автоматически.

Заключение

SyntaxError: invalid syntax пугает только на старте. За ним почти всегда стоит одна из десятка механических причин: двоеточие, скобка, кавычка, запятая или устаревший синтаксис. Читайте трейсбек сверху вниз, проверяйте строку выше стрелки, держите под рукой таблицу-шпаргалку — и ошибка перестаёт быть препятствием.

Официальные детали о разборе синтаксических ошибок — в документации Python по обработке ошибок. Разбор частых случаев с примерами — в руководстве Real Python.

для id="пайтон2" двойной блок курсов не обнаружен

Читайте также

3 материала