Python IndentationError hatası, kod satırlarının blok yapısına uygun girintilenmemesi nedeniyle oluşur. Python’da girinti yalnızca görünüşü düzenlemez; if, for ve def gibi blokların hangi satırları kapsadığını belirler. Bu nedenle çözüm, rastgele boşluk silmekten önce kodun blok mantığını incelemektir.
Hata genellikle kod kopyalama, satır taşıma, fazladan boşluk ekleme ya da sekme ve boşluk karakterlerini karıştırma sırasında ortaya çıkar. Teşhise başlarken kendine şu soruyu sor: “Bu satır, bir önceki satırda başlayan hangi bloğa ait?”
Python girinti hataları neden oluşur?
Python’da girinti, bir kod satırının hangi yapının içinde bulunduğunu gösteren yapısal bir kuraldır. Örneğin iki nokta üst üste ile biten bir if satırından sonra gelen komutlar, bu koşul bloğunun içinde olduğunu gösterecek şekilde aynı seviyede girintilenmelidir.
Girinti seviyesi bozulduğunda Python, satırların hangi bloğa ait olduğunu belirleyemez. Bunun birkaç yaygın nedeni vardır:
- Blok içinde olması gereken bir satırın hiç girintilenmemesi
- Blok dışında olması gereken bir satıra fazladan boşluk eklenmesi
- Satırların farklı miktarlarda boşlukla hizalanması
- Sekme karakteriyle boşluk karakterinin aynı kod içinde karıştırılması
- Başka bir yerden kopyalanan kodun mevcut blok yapısına uymaması
- Bir satırın başka bir bloğa taşınırken eski girintisinin korunması
Burada önemli olan, yalnızca hatalı görünen karakterleri düzeltmeye çalışmamaktır. Önce kodun yapısını zihninde veya kâğıt üzerinde ayır: Hangi satır blok başlatıyor, hangi satırlar bu bloğun içinde ve blok nerede sona eriyor? Bir satırın girintisi, komşu satırla aynı görünse bile farklı bir sekme-boşluk kombinasyonundan oluşabilir.
Hata mesajı ne anlatır, hangi satırlar kontrol edilir?

Hata mesajı, Python yorumlayıcısının girinti yapısında nerede sorun algıladığını söyler; fakat gerçek başlangıç noktası her zaman bildirilen satır olmayabilir. Örneğin bir önceki satırda eksik iki nokta bulunması, sonraki satırın beklenmedik görünmesine yol açabilir. Bu nedenle belirtilen satırla birlikte hemen önceki blok başlangıcını da kontrol etmelisin.
| Hata mesajı | Muhtemel neden | Önce kontrol edilecek yer |
|---|---|---|
IndentationError |
Blok yapısının bozulması veya geçersiz girinti düzeni | Hata satırı, önceki blok başlangıcı ve hizalanan komşu satırlar |
unexpected indent |
O konumda beklenmeyen fazladan girinti | Satırın gerçekten bir blok içinde olup olmadığı ve başındaki boşluklar |
unindent does not match any outer indentation level |
Girintinin mevcut blok seviyelerinden biriyle eşleşmemesi | Geri çekilen satırın önceki seviyelerle aynı hizaya gelip gelmediği |
Pratik bir karar çerçevesi kullanabilirsin: Satır gereğinden fazla içerideyse unexpected indent olasılığını, bloktan çıkarken yanlış seviyeye dönüyorsa unindent mesajını düşün. Genel IndentationError durumunda ise blok başlangıcından itibaren satırların girinti düzenini baştan izle. Yazar: eğitmenimiz Berk Keskin.
if, for ve def bloklarında doğru girinti nasıl izlenir?
Python’da if, for ve def satırları iki nokta üst üste ile bitiyorsa, Python bir alt satırda yeni bir girinti seviyesi bekler. Aynı bloğa ait satırlar aynı hizada bulunur; iç içe başlayan her yeni blok ise bir seviye daha içeriden yazılır.
Girintiyi kontrol ederken yalnızca hata mesajının gösterdiği satıra bakma. Örneğin teşhise bir for satırından başlayabilirsin:
forsatırından sonra gelenprintsatırının döngü bloğuna ait olduğunu ve bir seviye içeride bulunduğunu kontrol et.- Döngünün içinde bir
ifsatırı varsa, bu satırın döngüyle aynı seviyede olduğunu doğrula. ifsonrasındaki komutun,ifbloğuna ait olduğu için bir seviye daha içeride olması gerektiğini izle.- Sonraki satır döngüye dönüyorsa,
ifseviyesinden çıkıp döngüyle aynı mantıksal seviyeye gelmelidir.
Her satır için şu mini akışı kullanabilirsin: Satır hangi bloğa ait? Bu satırdan önce iki nokta üst üste var mı? Bir önceki satırla aynı mantıksal seviyede mi? Bu sorular, hatanın işaret ettiği satırdan önceki blok yapısını görmeyi kolaylaştırır.
for sayi in sayilar:
if sayi > 0:
print(sayi)
print("döngü devam ediyor")
Bu örnekte if satırı for bloğunun içindedir. İlk print satırı if bloğuna, ikinci print satırı ise doğrudan for bloğuna aittir.
Çalışan ve hatalı kod örnekleriyle çözüm adımları

Çalışan örnek
for sayi in [1, 2, 3]:
if sayi > 1:
print(sayi)
Beklenen çıktı:
2
3
Burada for bloğu bir seviye, içteki if bloğu ise iki seviye içeridedir. Düzeltilmiş kod çalıştırıldığında beklenen sonuç bu iki satırdır.
Hatalı örnek
for sayi in [1, 2, 3]:
if sayi > 1:
print(sayi)
print("kontrol tamamlandı")
Bu kodda son print satırı, ait olduğu if bloğuna göre gereğinden fazla içeridedir. Python bu satırda unexpected indent hatası verebilir. Mesaj sonraki satırı gösterse de doğru teşhis için hemen önceki if ve print satırlarının seviyelerini karşılaştırmak gerekir.
- Hata satırını ve hemen önceki satırları birlikte incele.
- Blok başlangıcını, yani iki nokta üst üste ile biten satırı belirle.
- Satırları ait oldukları mantıksal seviyeye yeniden hizala.
- Dosyada sekme ve boşlukların karışıp karışmadığını kontrol et.
- Kodu yeniden çalıştır ve çıktıyı karşılaştır.
Girinti mantığını uygulamalı olarak pekiştirmek istersen, birebir Python dersleri kapsamında kodu yalnızca düzeltmek yerine blok yapısını adım adım teşhis etmeye odaklanabilirsin.
Sekme ve boşluk karışımı ile kopyalanan kod nasıl denetlenir?
Python’da sekme ve boşluk karakterleri ekranda benzer görünebilir; ancak Python bunları aynı girinti olarak değerlendirmeyebilir. Bu nedenle kopyalanan veya otomatik biçimlendirilen bir kodda satırlar görsel olarak hizalı dursa bile farklı girinti seviyeleri oluşabilir. Böyle bir durumda hata, yalnızca gösterilen satırda değil, bloğun daha önce başlayan kısmında da aranmalıdır.
Önce tek bir girinti yaklaşımı seç
Aynı dosyanın bir bölümünde sekme, başka bir bölümünde boşluk kullanmak yerine dosya genelinde tek bir yaklaşım kullan. Genellikle dört boşlukla ilerlemek, başlangıç seviyesinde kodun yapısını daha kolay takip etmeyi sağlar. Buradaki amaç yalnızca karakter sayısını değiştirmek değil, aynı mantıksal seviyedeki satırların gerçekten aynı hizaya gelmesini sağlamaktır.
Blok haritası çıkar
Girintiyi denetlerken kodu satır satır değil, blok blok incele. Aşağıdaki basit yöntem, özellikle iç içe if, for ve def yapılarında işe yarar:
- İki nokta üst üste ile biten satırları işaretle.
- Bu satırların hemen altındaki gövde satırlarının bir seviye içeride olduğunu kontrol et.
- İç içe yeni bir blok varsa bir seviye daha ilerle.
- Blok sona erdiğinde satırların mantıksal seviyeye uygun biçimde sola döndüğünü doğrula.
Örneğin bir for döngüsünün içinde if koşulu varsa, döngü gövdesindeki satırlar aynı seviyede; koşulun gövdesindeki satırlar ise onlardan bir seviye daha içeride olmalıdır. Aynı blokta bulunan iki satırdan biri diğerinden daha içerideyse, bunun bilinçli bir alt blok oluşturup oluşturmadığını kontrol et.
Görünmeyen karakterleri ve değişen satırları incele
Kullandığın editörde sekme ve boşlukları görünür kılan ayar varsa bunu etkinleştir. Böylece yalnızca ekrandaki hizaya değil, satır başında gerçekten hangi karakterlerin bulunduğuna bakabilirsin. Bu özellik yoksa sorunlu satırların girintisini silip aynı yöntemle yeniden yazmak da pratik bir çözümdür.
Biçimlendirme sonrasında değişen her satırı yeniden oku. Bir satırın yalnızca sola veya sağa taşınmış görünmesi, programın çalışma mantığının değişmediği anlamına gelmez. Satır artık döngünün, koşulun veya fonksiyonun içinde mi dışında mı? Denetimin temel sorusu budur.
Girinti hatasını sürekli düzeltmekte zorlanıyor ve kodun blok yapısını birlikte teşhis etmek istiyorsan, kişiye özel Python çalışma desteği bu süreci daha düzenli hâle getirebilir.
Son kontrol: Girinti hatasını yeniden çalıştırmadan önce beş adım
Kodu tekrar çalıştırmadan önce aşağıdaki beş adımlık listeyi uygula. Her adım, hata mesajıyla gerçek neden arasındaki farkı daha kolay görmeni sağlar.
- Hata satırıyla birlikte önceki satırları kontrol et. Gösterilen satır, yanlış başlayan veya kapanmayan bloğun sonucu olabilir.
- İki nokta üst üste ile başlayan blokların gövdesini doğrula.
if,for,while,defve benzeri satırlardan sonra ilgili kodun içeride başladığından emin ol. - Aynı mantıksal seviyedeki satırları hizala. Aynı bloğa ait komutlar aynı girinti seviyesinde bulunmalıdır.
- Sekme-boşluk karışımını ara. Görünmeyen karakterleri göster, şüpheli satırların girintisini temizleyip tek yöntemle yeniden yaz.
- Düzelttikten sonra kodun beklenen çıktısını yeniden kontrol et. Hata ortadan kalksa bile kodun doğru blok içinde çalıştığını ve beklenen sonucu ürettiğini doğrula.
Girintiyi görsel olarak takip ederek ve tekrar edilebilir materyallerle çalışarak ilerlemek istersen, video tabanlı yazılım eğitimlerini değerlendirebilirsin. Python temellerini ölçmek için ise ücretsiz Python bilgi testini kullanabilirsin.
Sık Sorulan Sorular
Python’da IndentationError ile SyntaxError arasındaki fark nedir?
IndentationError, kodun girinti yapısında sorun olduğunu belirtir. SyntaxError ise Python’un kodu beklenen söz dizimi kurallarına göre okuyamadığını gösteren daha genel bir söz dizimi hatasıdır. Girinti hataları bazı durumlarda söz dizimi sorunlarıyla birlikte değerlendirilebilir; bu nedenle yalnızca hata adını değil, gösterilen satırın çevresindeki blok yapısını da incelemek gerekir.
Hata mesajı bir satırı gösterdiği hâlde neden önceki satırları da kontrol etmek gerekir?
Python, bir bloğun yanlış başladığını veya önceki satırdaki girintinin yapıyı bozduğunu daha sonraki satırda fark edebilir. Bu yüzden hata mesajındaki satır her zaman hatanın ilk oluştuğu satır değildir. Özellikle iki nokta üst üste ile biten satırları ve onun altındaki ilk komutları birlikte kontrol etmelisin.
Python’da sekme ve boşluk karakterlerinin karıştığı nasıl anlaşılır?
Görünüşte aynı hizada duran satırlar Python tarafından farklı seviyelerde değerlendiriliyorsa sekme ve boşluk karışımı olabilir. Görünmeyen karakterleri gösteren editör ayarlarını kullanabilir veya şüpheli satırların başındaki girintiyi silerek tek bir yöntemle yeniden yazabilirsin.
if, for veya def satırından sonra girinti kaç boşluk olmalıdır?
Bu satırlardan sonra başlayan gövde, üst satırdan içeride olmalıdır. Python kodlarında yaygın yaklaşım dört boşluk kullanmaktır; ancak asıl önemli olan, dosya boyunca tutarlı bir girinti seviyesini korumaktır. İç içe her blokta bir seviye daha içeri girilmeli, blok sona erdiğinde ilgili seviyeye dönülmelidir.
Bu içerik, koddan önce düşünmeyi ve hatayı adım adım teşhis etmeyi merkeze alan öğrenme yaklaşımıyla eğitmenimiz Berk Keskin tarafından hazırlanmıştır.