Python IndentationError: unexpected indent hatası, kodun mevcut blok yapısında beklenmeyen bir girinti olduğunda ortaya çıkar. Çözmek için hata gösterilen satırın başındaki boşlukları, hemen üstündeki satırın bir blok başlatıp başlatmadığını ve komşu satırların hizasını karşılaştır. Gereksiz girintiyi kaldır veya satırı ait olduğu blok seviyesine taşı.
Python "IndentationError: unexpected indent" Hatası Ne Anlatır?
unexpected indent, Python'ın o satırdaki girintiyi mevcut blok yapısında beklemediğini gösterir. Girinti, bir satırın hangi kod bloğuna ait olduğunu belirtir. Satırın başındaki boşluklar, bulunduğu yerde açık bir blok yokken içeri girilmiş gibi görünüyorsa hata oluşur.
İlk teşhis için yalnızca işaretlenen satıra bakma: Hemen üstündeki satırı ve aynı seviyede olması gereken komşu satırları da incele. Üst satır yeni bir blok açmıyorsa veya önceki blok zaten kapanmışsa sorun, işaretlenen satırın hizasında olabilir.
Gereksiz Girintiyi ve Kapanmış Bloktan Sonraki Satırı Bul

Önce hata satırının başındaki boşlukları karşılaştır. Ardından üst satırda girintiyi gerektiren bir blok başlangıcı olup olmadığını kontrol et. Satır bağımsız bir komutsa, aynı seviyedeki diğer bağımsız komutlarla hizala.
Blok açılmadan girintilenmiş satır
Aşağıda print satırını içeri alacak bir blok yoktur. Başındaki gereksiz boşluklar hataya yol açar:
mesaj = "Merhaba"
print(mesaj)
Girintiyi kaldırdığında kod çalışır:
mesaj = "Merhaba"
print(mesaj)
Beklenen çıktı: Merhaba.
Kapanmış bloktan sonra girintili kalan satır
Bir satır sola hizalanarak bloktan çıktığında, ardından gelen bağımsız satır da o seviyede kalmalıdır. Bu örnekte print("Bitti") satırı if bloğunu kapatır; sonraki satırın yeniden içeri girintilenmesi hatalıdır:
hazir = True
if hazir:
print("Hazır")
print("Bitti")
print("Devam")
print("Devam") satırını diğer bağımsız komutla hizala:
hazir = True
if hazir:
print("Hazır")
print("Bitti")
print("Devam")
Düzeltilmiş kodun beklenen çıktısı:
Hazır
Bitti
Devam
Tab, Boşluk ve Otomatik Girintiyi Kontrol Et
Tab ve boşluk karakterleri ekranda benzer görünebilir, ancak Python bunları aynı girinti olarak değerlendirmeyebilir. Ayrıca editör, önceki satırdaki girintiyi yeni satıra otomatik taşıyabilir. Blok sona erdiğinde bu girinti silinmezse, Python beklenmeyen bir girinti algılar.
- Hata verilen satırın başındaki tüm girintiyi sil.
- Editöründe görünmez karakterleri gösterme seçeneği varsa etkinleştir. Tab karakterleri ile boşlukların farklı işaretlendiğini kontrol et.
- Aynı blokta bulunan komşu satırların başlangıç hizasını karşılaştır. Gerekiyorsa dosya içinde tek tip girinti kullan.
- Girintiyi yeniden elle ekle. Blok dışına çıkan satırlarda, otomatik taşınan fazla boşlukları kaldır.
Özellikle iki nokta üst üste ile biten bir satırdan sonra yeni satıra geçerken otomatik girinti oluşur. Bir sonraki satır artık blok dışındaysa girinti seviyesini geri al. Girinti mantığını temel düzeyde yeniden çalışmak için ücretsiz Sıfırdan Temel Python video eğitimi de yardımcı olabilir.
if, for ve Fonksiyon Bloklarında Doğru Girinti

if, for ve def satırları iki nokta üst üste ile bittiğinde yeni bir blok başlatır. Bu bloğun gövdesi girintili yazılır. Blok tamamlandığında dışarıdaki satır önceki hizaya döner.
if bloğu
Aşağıdaki örnekte ikinci print satırında gereğinden fazla girinti vardır:
if True:
print("Koşul doğru")
print("Fazla girinti")
Düzeltilmiş hâlinde blok içindeki satırlar aynı hizadadır:
if True:
print("Koşul doğru")
print("Blok bitti")
Beklenen çıktı: Koşul doğru, ardından Blok bitti.
for bloğu
for sayi in [1, 2]:
print(sayi)
print("Döngü sürüyor")
Fazla girintiyi kaldırınca:
for sayi in [1, 2]:
print(sayi)
print("Döngü bitti")
Beklenen çıktı: 1, 2 ve Döngü bitti.
Fonksiyon bloğu
def selamla():
return "Merhaba"
print("Fazla girinti")
Fonksiyon dışındaki satır önceki hizaya dönmelidir:
def selamla():
return "Merhaba"
print(selamla())
Beklenen çıktı: Merhaba.
Üç yapıyı birlikte doğrulama
def toplam_goster(sayilar):
toplam = 0
for sayi in sayilar:
if sayi > 1:
toplam += sayi
return toplam
print(toplam_goster([1, 2, 3]))
Burada for, fonksiyonun içinde; if ise for bloğunun içindedir. return satırı döngüden çıkıp fonksiyon seviyesine döner. Beklenen çıktı: 5.
Hata Ayıklama Kontrol Listesiyle Kodu Doğrula
IndentationError: unexpected indent hatasını çözerken yalnızca hata mesajında gösterilen satıra değil, o satırın bağlı olduğu blok yapısına da bakmalısın.
- Hata satırını bul: Hata mesajındaki satır numarasını kod içinde işaretle.
- Üst satırı incele: Bir önceki satırda blok kapanmış mı, yoksa yeni bir blok mu başlıyor kontrol et.
- Blok ilişkisini sor: Satırın bir
if,for, fonksiyon veya başka bir blok içinde olup olmadığını belirle. - Gereksiz boşlukları kaldır: Satırın başında komşu satırlardan fazla girinti varsa sil ve yeniden hizala.
- Komşu satırlarla karşılaştır: Aynı blokta bulunan satırların aynı seviyede, iç blokların ise bir seviye daha içeride olduğundan emin ol.
- Tab ve boşlukları düzelt: Dosya genelinde girinti için tek bir kullanım biçimi seç ve karışık kullanımı temizle.
- Otomatik girintiyi kontrol et: Kod editörünün satır başına kendiliğinden eklediği boşlukları incele. Gerekiyorsa satır başını silip yeniden girintile.
- Kodu yeniden çalıştır: Düzeltmeden sonra dosyayı baştan çalıştır ve aynı hata sürüyorsa gösterilen satırın üstündeki bloğu tekrar incele.
İç içe if ve for bloklarında her seviye görsel olarak ayırt edilebilmelidir:
sayilar = [2, 5, 8]
for sayi in sayilar:
if sayi % 2 == 0:
print(f"{sayi} çift")
Beklenen çıktı:
2 çift
8 çift
if satırı for bloğunun içinde, print satırı ise if bloğunun içinde yer alır. Girinti seviyelerini bu şekilde karşılaştırmak, hatanın kaynağını daha hızlı görmeyi sağlar.
Girinti ve blok yapısı bilgini kısa sorularla ölçmek için Python bilgi testini çözebilirsin.
Girinti Mantığını Pekiştirme ve Destek Seçenekleri
Hata mesajını yalnızca tek bir satırı düzelterek geçmeye çalışmak yerine, küçük bir örnek üzerinden blok seviyelerini yeniden kurmak daha açıklayıcıdır. Her çalıştırmadan önce if, for ve fonksiyon gövdelerinin görsel olarak hizalanması, gereksiz girintiyi ve eksik girintiyi fark etmeyi kolaylaştırır.
Aynı yapısal hataları küçük örneklerle çözmekte zorlanıyorsan, kişiye özel ilerlemek için birebir Python özel ders programı hakkında bilgi edinebilirsin.
Sık Sorulan Sorular
IndentationError: unexpected indent ile expected an indented block arasındaki fark nedir?
unexpected indent, girintinin o satırda beklenmediğini gösterir. expected an indented block ise iki nokta ile başlayan bir bloktan sonra gelecek satırın yeterince içeri alınmadığını anlatır.
Tab ve boşluk karışımı girinti hatasına nasıl yol açar?
Tab ve boşluklar ekranda benzer görünebilir, ancak Python bunları farklı girinti karakterleri olarak değerlendirebilir. Bu nedenle aynı dosyada tek bir girinti biçimi kullanmak ve karışık satırları yeniden hizalamak gerekir.
Hata mesajında gösterilen satır doğru görünüyorsa hangi satırları kontrol etmeliyim?
Önceki satırları, özellikle iki nokta ile biten blok başlangıçlarını ve bloktan çıkılan satırları kontrol et. Ayrıca komşu satırlarda gizli tab, fazla boşluk veya otomatik eklenmiş girinti bulunup bulunmadığına bak.
Girinti seviyelerini düzenli biçimde karşılaştırıp kodu küçük örneklerle çalıştırdığında bu hata daha anlaşılır ve yönetilebilir hâle gelir.