Menu
Coddy logo textTech

Что такое синтаксическая ошибка?

Синтаксическая ошибка это нарушение структуры кода, например пропущенное двоеточие, скобка или кавычка, из-за которого код не соответствует грамматике языка программирования. Компилятор или интерпретатор отвергает программу ещё до того, как выполнится хотя бы одна её строка.

Автор: Kevin Spektor, Сооснователь и CTO

Обновлено 24 сентября 2026 г.

Прежде чем выполнить хотя бы одну строку твоей программы, Python читает весь файл и проверяет, соответствует ли он грамматике языка. Если одна строка эту грамматику нарушает, не выполняется ничего. Запусти эту программу и посмотри, чего не произойдёт: первый print так ничего и не выведет.

  File "main.py", line 4
    if temperature > 30
                       ^
SyntaxError: expected ':'

Строка 1 совершенно правильная, но «Checking the temperature» в выводе нет. Python отверг файл целиком, потому что строка if должна заканчиваться двоеточием. Добавь : после 30, запусти снова, и выведутся обе строки.

Как обнаруживается синтаксическая ошибка

У каждого языка программирования есть грамматика: какие слова допустимы, где открываются и закрываются скобки, что должно идти после if. Программа, которая её проверяет, называется парсером (синтаксическим анализатором), и она работает на первом этапе превращения исходного кода в то, что может выполнить машина.

  1. Токенизатор разбивает текст на токены: if, temperature, >, 30 и так далее.
  2. Парсер читает токены по порядку и укладывает их в грамматику. После if temperature > 30 он ждёт :, а находит конец строки.
  3. Он останавливается и сообщает место, где сдался: файл, номер строки и знак ^ под нужной позицией.
  4. Раз разбор не удался, код не генерируется, поэтому не выполняется ни одна строка программы.

В CPython парсер работает при каждом запуске скрипта. В языках с отдельным этапом сборки эту проверку выполняет компилятор: gcc, clang и javac отказываются создавать программу, пока остаётся хотя бы одна синтаксическая ошибка. Поэтому синтаксические ошибки относят к ошибкам времени компиляции, в отличие от ошибки времени выполнения, которая происходит, когда программа уже работает.

Частые синтаксические ошибки в Python

Вот ошибки, которые стоят за большинством синтаксических ошибок у начинающих, с точным сообщением, которое выводит Python 3.12.

КодСообщениеИсправление
if x > 3SyntaxError: expected ':'Заканчивай строки if, for, while, def и class символом :
print("Hi"SyntaxError: '(' was never closedЗакрывай каждую открытую скобку
name = "AdaSyntaxError: unterminated string literal (detected at line 1)Закрой кавычку
if x = 5:SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?Сравнивай с помощью ==
print "Hi"SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?В Python 3 нужно print(...)
if a > 0 && b > 0:SyntaxError: invalid syntaxВ Python используются and, or и not
if без строки с отступом под нимIndentationError: expected an indented block after 'if' statement on line 1Сделай отступ тела в четыре пробела

IndentationError это разновидность SyntaxError: в Python отступы входят в грамматику.

Не каждая опечатка это синтаксическая ошибка. pritn("hello") полностью соответствует грамматике, ведь имя со скобками после него это вызов функции. Python узнаёт, что функции pritn не существует, только когда доходит до этой строки, и тогда выбрасывает NameError: name 'pritn' is not defined. Did you mean: 'print'?. Это ошибка времени выполнения, и все строки выше неё уже выполнились.

Почему указанная строка может быть не той

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

  File "main.py", line 1
    prices = [4.50, 3.20, 7.80
             ^
SyntaxError: '[' was never closed

Python 3.10 и новее указывает на открывающую [ в строке 1. Python 3.9 и старше сообщал только invalid syntax в строке 2, то есть в строке после настоящей ошибки. Поэтому если указанная строка выглядит правильной, проверь конец строки над ней.

Другие парсеры ведут себя так же. Получив SELECT name FORM users; с опечаткой в FROM, SQLite читает FORM как псевдоним (второе имя) столбца name и падает только на следующем слове:

Parse error near line 1: near "users": syntax error
  SELECT name FORM users;
                   ^--- error here

Синтаксические ошибки в C, Java и JavaScript

Компилируемые языки сообщают о синтаксических ошибках при сборке, а не при запуске. Вот объявление без точки с запятой, скомпилированное Clang (компилятором, который запускает команда gcc на macOS):

#include <stdio.h>

int main(void) {
    int count = 3
    printf("%d\n", count);
    return 0;
}
main.c:4:18: error: expected ';' at end of declaration

javac сообщает о той же ошибке в Java как error: ';' expected, и файл .class не создаётся. В C одна пропущенная фигурная скобка может дать десяток ошибок ниже по файлу. Исправь первую и скомпилируй снова, потому что остальные часто оказываются её последствиями.

Движки JavaScript, например V8, разбирают весь скрипт перед запуском, точно как Python. Node.js отвергает этот файл ещё до вывода «start»:

console.log("start");
if (x > 1 {
  console.log("big");
}
SyntaxError: Unexpected token '{'

В браузере синтаксическая ошибка останавливает только этот файл скрипта, а остальные скрипты на странице продолжают работать.

Как исправить синтаксическую ошибку

  1. Сначала прочитай последнюю строку сообщения. В ней названа проблема: пропущенный :, незакрытая (, неожиданный токен.
  2. Перейди к указанной строке и посмотри на знак ^. Если строка выглядит нормально, проверь строку над ней.
  3. Проверь пары. У каждой (, [, { и кавычки должна быть пара. Большинство редакторов подсвечивают парную скобку, когда курсор стоит рядом с ней.
  4. Проверь знаки препинания, которых требует язык: двоеточия и отступы в Python, точки с запятой и фигурные скобки в C, Java и JavaScript.
  5. Исправь только первую ошибку и запусти снова. Следующие сообщения часто вызваны первой.
  6. Следи за подсветкой синтаксиса. После незакрытой кавычки остаток файла обычно окрашивается в цвет строки, и так видно, где она началась.

Хорошая новость в том, что синтаксические ошибки исправлять проще всего: инструмент сообщает, что что-то не так и примерно где. Более сложные ошибки появляются позже, когда код уже выполняется.

Что читать дальше

Программа, прошедшая парсер, всё равно может упасть во время работы: это ошибка времени выполнения. Программа, которая доходит до конца, но выводит неверный ответ, содержит логическую ошибку, и на той странице все три типа сравниваются в одной таблице. Сами правила грамматики описаны в статьях синтаксис Python и синтаксис C, а потренироваться можно в курсе Python.

Часто задаваемые вопросы

Какой пример синтаксической ошибки самый типичный?
Пропущенная закрывающая скобка в print("Hello" это синтаксическая ошибка, как и строка if без двоеточия в Python: if x > 3. В C и Java чаще всего встречается пропущенная точка с запятой в конце инструкции. Во всех случаях код не соответствует грамматике, поэтому запустить его нельзя.
Чем синтаксическая ошибка отличается от семантической?
Синтаксическая ошибка нарушает грамматику, поэтому код даже не удаётся разобрать. Семантическая ошибка это грамматически правильный код с неверным смыслом. В одних книгах так называют ошибки типов, которые отвергает компилятор, например присваивание текста переменной int в Java; в других это просто другое название логической ошибки.
Что такое синтаксическая ошибка в C?
В C это код, который компилятор не может разобрать: чаще всего пропущенная точка с запятой, непарная фигурная скобка или опечатка в ключевом слове. gcc и clang выводят файл, строку и столбец, например main.c:4:18: error: expected ';' at end of declaration, и не создают исполняемый файл, пока не исправлены все ошибки.
Почему Python не исправляет синтаксические ошибки сам?
Потому что у большинства синтаксических ошибок есть несколько возможных исправлений, а неверная догадка изменила бы смысл программы. Незакрытая скобка могла закрываться после первого элемента, а могла после десятого. Современный Python подсказывает вероятное исправление, например Did you mean print(...)?, но решение оставляет тебе.
Что означает syntax error на калькуляторе?
То же, что и в коде: введённое выражение не соответствует правилам калькулятора, поэтому его нельзя вычислить. Типичные причины: незакрытая скобка, два оператора подряд или клавиша вычитания там, где нужен знак минуса перед числом. TI-84, например, показывает ERR:SYNTAX.
Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ