Menu
Coddy logo textTech

Co to jest syntax error (błąd składniowy)?

Syntax error, czyli błąd składniowy, to pomyłka w strukturze kodu, na przykład brakujący dwukropek, nawias lub cudzysłów, która łamie reguły gramatyczne języka programowania. Kompilator lub interpreter odrzuca program, zanim wykona się którakolwiek jego część.

Autor: Kevin Spektor, Współzałożyciel i CTO

Aktualizacja: 24 września 2026

Zanim Python wykona choćby jedną linię twojego programu, czyta cały plik i sprawdza, czy trzyma się on gramatyki języka. Jeśli jedna linia tę gramatykę łamie, nie wykonuje się nic. Uruchom ten program i zobacz, co się nie wydarzy: pierwsze print nic nie wypisze.

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

Linia 1 jest całkowicie poprawna, a mimo to w wyniku nie ma „Checking the temperature”. Python odrzucił cały plik, bo linia if musi kończyć się dwukropkiem. Dodaj : po 30, uruchom program jeszcze raz, a wypiszą się obie linie.

Jak wykrywany jest błąd składniowy

Każdy język programowania ma gramatykę: które słowa są dozwolone, gdzie otwierają się i zamykają nawiasy, co musi nastąpić po if. Program, który ją sprawdza, nazywa się parserem i działa na pierwszym etapie zamieniania kodu źródłowego na coś, co maszyna może wykonać.

  1. Tokenizer dzieli tekst na tokeny: if, temperature, >, 30 i tak dalej.
  2. Parser czyta tokeny po kolei i dopasowuje je do gramatyki. Po if temperature > 30 oczekuje :, a trafia na koniec linii.
  3. Zatrzymuje się i zgłasza miejsce, w którym się poddał: plik, numer linii i daszek (^) pod tą pozycją.
  4. Ponieważ parsowanie się nie powiodło, nie powstaje żaden kod, więc nie wykonuje się żadna linia programu.

W CPythonie parser działa za każdym razem, gdy uruchamiasz skrypt. W językach z osobnym etapem budowania tę kontrolę wykonuje kompilator: gcc, clang i javac odmawiają utworzenia programu, dopóki zostaje choć jeden błąd składniowy. Dlatego błędy składniowe zalicza się do błędów czasu kompilacji, w przeciwieństwie do błędu wykonania, który pojawia się, gdy program już działa.

Częste błędy składniowe w Pythonie

Oto pomyłki, które stoją za większością błędów składniowych widywanych przez początkujących, z dokładnym komunikatem wypisywanym przez Pythona 3.12.

KodKomunikatPoprawka
if x > 3SyntaxError: expected ':'Kończ linie if, for, while, def i class znakiem :
print("Hi"SyntaxError: '(' was never closedZamykaj każdy otwarty nawias
name = "AdaSyntaxError: unterminated string literal (detected at line 1)Zamknij cudzysłów
if x = 5:SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?Porównuj za pomocą ==
print "Hi"SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?Python 3 wymaga print(...)
if a > 0 && b > 0:SyntaxError: invalid syntaxPython używa and, or i not
if bez żadnej wciętej linii pod spodemIndentationError: expected an indented block after 'if' statement on line 1Wcinaj ciało bloku o cztery spacje

IndentationError to rodzaj SyntaxError: w Pythonie wcięcia są częścią gramatyki.

Nie każda literówka jest błędem składniowym. pritn("hello") jest w pełni zgodne z gramatyką, bo nazwa z nawiasami to wywołanie funkcji. Python odkrywa, że funkcja o nazwie pritn nie istnieje, dopiero gdy dochodzi do tej linii, i wtedy zgłasza NameError: name 'pritn' is not defined. Did you mean: 'print'?. To jest błąd wykonania, a wszystkie linie powyżej zdążyły się już wykonać.

Dlaczego zgłoszona linia może być zła

Parser zgłasza miejsce, w którym nie mógł iść dalej, a to nie zawsze jest miejsce pomyłki. Klasyczny przypadek to niezamknięty nawias: parser nie może wiedzieć, że nawias nigdy nie został zamknięty, dopóki nie przeczyta tekstu poza miejscem, w którym powinien być zamknięty.

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

Python 3.10 i nowsze wskazują otwierający [ w linii 1. Python 3.9 i starsze zgłaszały tylko invalid syntax w linii 2, czyli w linii po faktycznej pomyłce. Gdy więc zgłoszona linia wygląda poprawnie, sprawdź koniec linii nad nią.

Inne parsery zachowują się tak samo. Dla SELECT name FORM users;, z literówką w FROM, SQLite odczytuje FORM jako alias (drugą nazwę) kolumny name i wywraca się dopiero słowo dalej:

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

Błędy składniowe w C, Javie i JavaScripcie

Języki kompilowane zgłaszają błędy składniowe podczas budowania, a nie uruchamiania. Oto deklaracja bez średnika, skompilowana Clangiem (kompilatorem, który na macOS uruchamia polecenie gcc):

#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 zgłasza tę samą pomyłkę w Javie jako error: ';' expected i nie zapisuje pliku .class. W C jeden brakujący nawias klamrowy może wywołać kilkanaście błędów dalej w pliku. Popraw pierwszy i skompiluj ponownie, bo pozostałe są często jego skutkiem.

Silniki JavaScriptu, takie jak V8, parsują cały skrypt przed uruchomieniem, dokładnie jak Python. Node.js odrzuca ten plik, zanim wypisze „start”:

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

W przeglądarce błąd składniowy zatrzymuje tylko ten jeden plik skryptu, a inne skrypty na stronie nadal działają.

Jak naprawić błąd składniowy

  1. Najpierw przeczytaj ostatnią linię komunikatu. Nazywa problem: brakujący :, niezamknięty (, nieoczekiwany token.
  2. Przejdź do zgłoszonej linii i spójrz na daszek. Jeśli linia wygląda dobrze, sprawdź linię nad nią.
  3. Sprawdź pary. Każdy (, [, { i cudzysłów potrzebuje partnera. Większość edytorów podświetla pasujący nawias, gdy kursor stoi obok.
  4. Sprawdź znaki, których wymaga język: dwukropki i wcięcia w Pythonie, średniki i nawiasy klamrowe w C, Javie i JavaScripcie.
  5. Popraw tylko pierwszy błąd i uruchom program ponownie. Kolejne komunikaty często wynikają z pierwszego.
  6. Obserwuj podświetlanie składni. Po niezamkniętym cudzysłowie reszta pliku zwykle przyjmuje kolor napisu, co pokazuje, gdzie się zaczął.

Dobra wiadomość: błędy składniowe najłatwiej naprawić, bo narzędzie mówi ci, że coś jest nie tak, i mniej więcej gdzie. Trudniejsze rodzaje błędów przychodzą później, gdy kod działa.

Co dalej

Program, który przejdzie przez parser, wciąż może się wysypać w trakcie działania, a to już błąd wykonania. Program, który dochodzi do końca, ale wypisuje złą odpowiedź, ma błąd logiczny, a tamta strona porównuje wszystkie trzy typy w jednej tabeli. Same reguły gramatyczne znajdziesz w przewodnikach po składni Pythona i składni C, a przećwiczysz je w kursie Pythona.

Najczęściej zadawane pytania

Jaki jest przykład błędu składniowego?
Pominięcie nawiasu zamykającego w print("Hello" to błąd składniowy, podobnie jak linia if bez dwukropka w Pythonie: if x > 3. W C i Javie najczęstszy jest brak średnika na końcu instrukcji. W każdym przypadku kod nie trzyma się gramatyki, więc nie może się wykonać.
Czym różni się błąd składniowy od błędu semantycznego?
Błąd składniowy łamie gramatykę, więc kodu nie da się nawet sparsować. Błąd semantyczny to kod poprawny gramatycznie, którego znaczenie jest błędne. Niektóre książki używają tego terminu dla błędów typów odrzucanych przez kompilator, takich jak przypisanie tekstu do int w Javie; inne traktują go jako inną nazwę błędu logicznego.
Co to jest błąd składniowy w C?
W C to kod, którego kompilator nie potrafi sparsować, najczęściej brakujący średnik, niesparowany nawias klamrowy albo źle zapisane słowo kluczowe. gcc i clang wypisują plik, linię i kolumnę, na przykład main.c:4:18: error: expected ';' at end of declaration, i nie tworzą pliku wykonywalnego, dopóki wszystkie błędy nie zostaną poprawione.
Dlaczego Python nie poprawia błędów składniowych automatycznie?
Bo większość błędów składniowych da się poprawić na więcej niż jeden sposób, a zły wybór zmieniłby znaczenie programu. Niezamknięty nawias mógł mieć się zamykać po pierwszym elemencie albo po dziesiątym. Nowoczesny Python podpowiada prawdopodobną poprawkę, na przykład Did you mean print(...)?, ale decyzję zostawia tobie.
Co oznacza syntax error na kalkulatorze?
To samo co w kodzie: wpisane wyrażenie nie trzyma się reguł kalkulatora, więc nie da się go obliczyć. Typowe przyczyny to niezamknięty nawias, dwa operatory z rzędu albo użycie klawisza odejmowania tam, gdzie potrzebny jest znak minus liczby ujemnej. Na przykład TI-84 wyświetla ERR:SYNTAX.
Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ