Sözdizimi Hatası (Syntax Error) Nedir?
Sözdizimi hatası (syntax error), eksik bir iki nokta, parantez ya da tırnak işareti gibi, kodun yapısındaki ve programlama dilinin dilbilgisi kurallarını bozan bir hatadır. Derleyici ya da yorumlayıcı programı, tek satırı bile çalışmadan reddeder.
Güncellendi: 24 Eylül 2026
Python programının tek bir satırını bile çalıştırmadan önce dosyanın tamamını okur ve dilin dilbilgisine uyup uymadığını kontrol eder. Bir satır bu dilbilgisini bozuyorsa hiçbir şey çalışmaz. Bu programı çalıştır ve neyin olmadığına dikkat et: ilk print hiçbir şey yazdırmaz.
File "main.py", line 4
if temperature > 30
^
SyntaxError: expected ':'
- satır tamamen geçerli, yine de "Checking the temperature" çıktıda yok. Python dosyayı bir bütün olarak reddetti, çünkü bir
ifsatırı iki nokta ile bitmek zorunda.30'dan sonra:ekle, tekrar çalıştır; iki satır da yazdırılır.
Sözdizimi hatası nasıl tespit edilir
Her programlama dilinin bir dilbilgisi vardır: hangi kelimelere izin verildiği, parantezlerin nerede açılıp kapandığı, if'ten sonra ne gelmesi gerektiği. Bunu kontrol eden programa ayrıştırıcı (parser) denir ve kaynak kodu bir makinenin çalıştırabileceği bir şeye dönüştürmenin ilk aşamasında çalışır.
- Tokenizer metni token'lara böler:
if,temperature,>,30ve devamı. - Ayrıştırıcı token'ları sırayla okur ve dilbilgisine oturtur.
if temperature > 30'dan sonra bir:bekler ama satırın sonuyla karşılaşır. - Durur ve pes ettiği yeri bildirir: dosyayı, satır numarasını ve o konumun altında bir şapka işareti (
^). - Ayrıştırma başarısız olduğu için kod üretilmez, dolayısıyla programın hiçbir satırı çalışmaz.
CPython'da ayrıştırıcı her script başlattığında çalışır. Ayrı bir derleme adımı olan dillerde bu kontrolü derleyici yapar: gcc, clang ve javac tek bir sözdizimi hatası kaldığı sürece program üretmeyi reddeder. Bu yüzden sözdizimi hataları derleme zamanı hataları arasında sayılır; program çalışırken ortaya çıkan çalışma zamanı hatasının tersine.
Python'da sık görülen sözdizimi hataları
Yeni başlayanların gördüğü sözdizimi hatalarının çoğunun arkasında bu hatalar vardır; yanlarında Python 3.12'nin yazdırdığı mesajın birebir hali.
| Kod | Mesaj | Çözüm |
|---|---|---|
if x > 3 | SyntaxError: expected ':' | if, for, while, def ve class satırlarını : ile bitir |
print("Hi" | SyntaxError: '(' was never closed | Açtığın her parantezi kapat |
name = "Ada | SyntaxError: unterminated string literal (detected at line 1) | Tırnak işaretini kapat |
if x = 5: | SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? | Karşılaştırmayı == ile yap |
print "Hi" | SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? | Python 3 print(...) ister |
if a > 0 && b > 0: | SyntaxError: invalid syntax | Python and, or ve not kullanır |
Altında girintili satır olmayan bir if | IndentationError: expected an indented block after 'if' statement on line 1 | Gövdeyi dört boşlukla içeri al |
IndentationError bir tür SyntaxError'dır: Python'da girinti dilbilgisinin parçasıdır.
Her yazım hatası bir sözdizimi hatası değildir. pritn("hello") dilbilgisine tamamen uyar, çünkü ardından parantez gelen bir isim bir fonksiyon çağrısıdır. Python pritn adında bir fonksiyon olmadığını ancak o satıra geldiğinde fark eder ve NameError: name 'pritn' is not defined. Did you mean: 'print'? hatasını fırlatır. Bu bir çalışma zamanı hatasıdır ve üstündeki satırlar çoktan çalışmıştır.
Bildirilen satır neden yanlış olabilir
Ayrıştırıcı devam edemediği noktayı bildirir; bu her zaman hatanın olduğu nokta değildir. Klasik örnek kapanmamış bir parantezdir: ayrıştırıcı parantezin hiç kapanmadığını, kapanması gereken yeri geçene kadar bilemez.
File "main.py", line 1
prices = [4.50, 3.20, 7.80
^
SyntaxError: '[' was never closed
Python 3.10 ve sonrası 1. satırdaki açılış [ işaretini gösterir. Python 3.9 ve öncesi yalnızca 2. satırda, yani asıl hatadan sonraki satırda invalid syntax bildirirdi. Bu yüzden bildirilen satır doğru görünüyorsa bir üstündeki satırın sonuna bak.
Başka ayrıştırıcılar da aynı şekilde davranır. FROM yanlış yazılmış SELECT name FORM users; sorgusunda SQLite, FORM'u name sütunu için bir takma ad (ikinci bir isim) olarak okur ve ancak bir kelime sonra hata verir:
Parse error near line 1: near "users": syntax error
SELECT name FORM users;
^--- error here
C, Java ve JavaScript'te sözdizimi hataları
Derlenen diller sözdizimi hatalarını çalıştırırken değil, derlerken bildirir. İşte noktalı virgülü olmayan bir tanımlama, Clang ile derlenmiş (macOS'ta gcc komutunun çalıştırdığı derleyici):
#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 aynı hatayı Java'da error: ';' expected olarak bildirir ve hiçbir .class dosyası yazılmaz. C'de tek bir eksik süslü parantez dosyanın ilerisinde bir düzine hata üretebilir. İlkini düzelt ve tekrar derle, çünkü diğerleri çoğu zaman onun sonucudur.
V8 gibi JavaScript motorları da, tıpkı Python gibi, bir script'i çalıştırmadan önce tamamını ayrıştırır. Node.js bu dosyayı "start" yazdırmadan reddeder:
console.log("start");
if (x > 1 {
console.log("big");
}
SyntaxError: Unexpected token '{'
Tarayıcıda bir sözdizimi hatası yalnızca o script dosyasının çalışmasını durdurur; sayfadaki diğer script'ler çalışmaya devam eder.
Sözdizimi hatası nasıl düzeltilir
- Önce mesajın son satırını oku. Sorunu adıyla söyler: eksik bir
:, kapanmamış bir(, beklenmeyen bir token. - Bildirilen satıra git ve şapka işaretine bak. Satır doğru görünüyorsa bir üstündeki satırı kontrol et.
- Çiftleri kontrol et. Her
(,[,{ve tırnak işaretinin bir eşi olmalı. Çoğu editör, imleç bir parantezin yanındayken eşini vurgular. - Dilin istediği noktalama işaretlerini kontrol et: Python'da iki nokta ve girinti, C, Java ve JavaScript'te noktalı virgül ve süslü parantez.
- Yalnızca ilk hatayı düzelt, sonra tekrar çalıştır. Sonraki mesajlar çoğu zaman ilkinden kaynaklanır.
- Sözdizimi renklendirmesine dikkat et. Kapanmamış bir tırnak işaretinden sonra dosyanın geri kalanı genelde string rengine bürünür; bu da sana nerede başladığını gösterir.
İyi haber şu ki sözdizimi hataları düzeltmesi en kolay türdür: araç bir şeylerin yanlış olduğunu ve aşağı yukarı nerede olduğunu söyler. Daha zor türler sonra, kod çalışırken gelir.
Sırada ne var
Ayrıştırıcıdan geçen bir program çalışırken yine de çökebilir; bu bir çalışma zamanı hatasıdır. Sonuna kadar çalışan ama yanlış cevap yazdıran bir programda mantık hatası vardır ve o sayfa üç türü tek bir tabloda karşılaştırır. Dilbilgisi kurallarının kendisi için Python sözdizimi ya da C sözdizimi sayfasını oku ve bunları Python kursunda pratik et.
Sıkça Sorulan Sorular
Sözdizimi hatasına bir örnek verir misin?
print("Hello" satırında kapanış parantezini unutmak bir sözdizimi hatasıdır; Python'da iki noktası olmayan bir if satırı da öyle: if x > 3. C ve Java'da en yaygın olanı, bir ifadenin sonundaki eksik noktalı virgüldür. Her durumda kod dilbilgisine uymadığı için çalışamaz.Sözdizimi hatası ile anlamsal hata (semantic error) arasındaki fark nedir?
int değişkenine metin atamak; bazıları ise mantık hatasının başka bir adı olarak kullanır.C dilinde sözdizimi hatası nedir?
gcc ve clang dosyayı, satırı ve sütunu yazdırır, örneğin main.c:4:18: error: expected ';' at end of declaration, ve her hata düzeltilene kadar çalıştırılabilir dosya üretmez.Python sözdizimi hatalarını neden kendisi düzeltmiyor?
Did you mean print(...)? gibi olası bir düzeltme önerir ama kararı sana bırakır.Hesap makinesinde syntax error ne demek?
ERR:SYNTAX gösterir.