Logo
Ana Sayfa
ÖZEL KODLAMA DERSLERİ
Yazılım Özel Ders
Tüm birebir programlara genel bakış
Python Yazılım Kursu
Sıfırdan ileri seviyeye birebir Python
Java Yazılım Kursu
OOP odaklı birebir Java eğitimi
AP Computer Science Principles
AP CSP sınav hazırlığı
GRUP DERSLERİ
Python & Django Masterclass
SINIRLI KONTENJAN
Java & Spring Boot Masterclass
SINIRLI KONTENJAN
C# .NET Masterclass
SINIRLI KONTENJAN
VİDEO DERSLER
Sıfırdan Temel Python Kursu
Kendi Hızında Öğren
ÜCRETSİZ
Seviye Testi
Ücretsiz — Python, Java, algoritma seviye testleri
Kariyerini Keşfet
Sertifika Doğrula
Belge numarası ve soyad ile doğrulama

Python'da Girinti (Indentation) Mantığı ve IndentationError Hatası Nasıl Önlenir?

Yazar: Berk Keskin 21.08.2026 ~12 dk okuma 10 Okunma
python-girinti-mantigi-indentationerror

Python'da girinti (indentation) süslü parantez yerine kod bloklarını belirlemek için kullanılır çünkü Python'ın tasarımcıları, kodun görsel yapısıyla mantıksal yapısının birebir aynı olmasını istemiştir. Bu yüzden bir if bloğunun, bir for döngüsünün ya da bir fonksiyonun neresi başlıyor neresi bitiyor sorusu, satır başındaki boşluk sayısıyla cevaplanır. IndentationError hatası da tam olarak bu boşluk düzeni bozulduğunda ortaya çıkar ve aslında Python'ın "senin kodunun bloğunu anlayamadım" demesinden başka bir şey değildir. Yeni başlayan hemen her öğrenci bu hatayla en az bir kez karşılaşır; bu, eksiklik değil, dilin mantığını öğrenme sürecinin doğal bir parçasıdır.

Python'da Kod Blokları Neden Süslü Parantez Yerine Girinti Kullanır?

C, Java veya JavaScript gibi diller bir kod bloğunun başladığını ve bittiğini süslü parantezlerle { } işaretler. Bu dillerde girinti sadece görsel bir tercih, bir "iyi alışkanlık" konusudur; derleyici için hiçbir anlam ifade etmez. İsterseniz tüm kodu tek satıra sıkıştırın, parantezler doğru yerdeyse program yine çalışır. Python ise bu işi tersine çevirir: görsel düzenin kendisini dilin gramerinin bir parçası hâline getirir. Bir if satırından sonra gelen ve daha içeride yazılan her satır, o if'in bloğuna aittir; girinti azaldığı an blok da biter.

Bu, gelişigüzel bir tercih değil, bilinçli bir tasarım kararıdır. Python'ın yaratıcıları, kodun nasıl göründüğü ile nasıl çalıştığı arasında bir boşluk bırakılırsa okunabilirliğin zamanla bozulacağını öngörmüştür. Süslü parantezli dillerde bazen parantezler doğru yerde olsa da girinti dağınık bırakılabilir; sonuç, çalışan ama okunması zor bir koddur. Python'da böyle bir tutarsızlık mümkün değildir çünkü girinti yanlışsa kod zaten çalışmaz. Bu da dolaylı olarak herkesi düzenli, tutarlı ve okunabilir kod yazmaya zorlar.

Elbette başka dillerden gelen ya da ilk kez programlamayla tanışan biri için bu durum başta biraz tuhaf gelebilir. "Neden bir boşluk eksik diye kodum çalışmıyor?" diye düşünmek son derece normaldir. Ancak bu farkı bir engel değil, Python'ın size sunduğu bir disiplin olarak görmek daha doğru bir bakış açısıdır. Kısa bir alışma süreciyle girintili yazım, elle parantez saymaktan çok daha doğal ve hızlı hâle gelir.

IndentationError Tam Olarak Nedir ve Ne Zaman Ortaya Çıkar?

IndentationError, Python yorumlayıcısının bir kod bloğunun sınırlarını beklediği gibi tanıyamadığı durumlarda verdiği hatadır. Yorumlayıcı, bir if, for, while ya da def satırından sonra bir girinti artışı bekler; bu artış yoksa, fazlaysa ya da tutarsızsa hata fırlatılır. Aşağıdaki örnekte önce doğru çalışan bir yapı, ardından yalnızca bir satırın girintisi bozularak elde edilen hatalı hâli yer alıyor:

Doğru çalışan hâli:

sicaklik = 28

if sicaklik > 25:
    print("Hava sıcak")
    print("Bol su iç")
else:
    print("Hava serin")

Aynı kodun kasıtlı olarak bozulmuş, IndentationError veren hâli:

sicaklik = 28

if sicaklik > 25:
    print("Hava sıcak")
   print("Bol su iç")
else:
    print("Hava serin")

İkinci örnekte print("Bol su iç") satırı bir boşluk eksik girintiyle yazıldığı için Python bunun bloğa mı ait olduğunu yoksa yeni bir yapı mı olduğunu ayırt edemez ve IndentationError: unindent does not match any outer indentation level benzeri bir mesaj verir. Hata mesajının sonunda genellikle hatanın olduğu satır numarası da belirtilir; bu numara, düzeltmeye nereden başlayacağınızı gösteren en değerli ipucudur. Hata mesajını okumaktan çekinmeyin, aslında Python size tam olarak nereye bakmanız gerektiğini söylüyor.

Tab ve Boşluk (Space) Karışıklığı: En Sinsi Girinti Hatası

Tab ve Boşluk (Space) Karışıklığı: En Sinsi Girinti Hatası

Girinti hatalarının en can sıkıcı türü, satır başında tab tuşu ile boşluk (space) karakterinin karışmasından doğar. Ekranda ikisi de aynı görünür; bir tab da birkaç boşluk kadar yer kaplıyormuş gibi durur, gözle bakıldığında satırlar hizalıymış gibi görünür. Ama Python'ın gözünde tab karakteri ile boşluk karakteri birbirinden tamamen farklıdır. Bir satırı tab ile, hemen altındaki satırı ise boşluklarla girintilediğinizde, siz ikisinin de aynı hizada olduğunu düşünseniz bile yorumlayıcı için bu iki satır farklı girinti seviyelerindedir.

Bunu somutlaştıran tipik bir durum şu şekildedir: bir fonksiyonun içindeki ilk satırı tab tuşuyla, ikinci satırı ise boşluk tuşlarına basarak girintilediniz. Editörünüzün ayarlarına göre ekranda ikisi de aynı noktada başlıyor gibi görünebilir, ancak Python dosyayı okurken karakterleri tek tek değerlendirir ve tab ile boşluk dizisini aynı kabul etmez. Sonuç, çoğu zaman TabError: inconsistent use of tabs and spaces in indentation ya da klasik bir IndentationError olur.

Bu hatanın gözle fark edilmesinin zor olmasının nedeni tam olarak budur: hata, kodun görüntüsünde değil, dosyanın içindeki görünmez karakterlerde saklıdır. Bu yüzden bu tuzağa düşmek sizin dikkatsizliğinizden değil, tab ve boşluğun doğası gereği ayırt edilemez olmasından kaynaklanır; deneyimli geliştiriciler bile zaman zaman bu karışıklığa takılır. Önemli olan, bu tür bir hatayla karşılaştığınızda paniklememek ve bir sonraki bölümde ele alınacak editör ayarları ile bu karışıklığı baştan engellemenin mümkün olduğunu bilmektir.

if, for, def Bloklarında Sık Görülen Girinti Hataları

Python öğrenirken IndentationError hatasıyla en sık üç yapıda karşılaşılır: koşul ifadeleri (if), döngüler (for, while) ve fonksiyon tanımları (def). Bunun nedeni basit; bu üç yapı da iki nokta üst üste (:) ile biter ve hemen ardından gelen satırların girintili olmasını zorunlu kılar. Yeni başlayan biri genellikle bu satırı yazarken elini alışkanlıkla sütun başına götürür ve hata mesajıyla karşılaşır. Bu, kodun mantığıyla değil, tamamen biçimsel bir eksiklikle ilgilidir.

Örneğin bir if bloğunda if sayi > 10: satırından sonra print("büyük") satırı hiç girintilenmeden sütun başında yazılırsa Python "beklenen bir girintili blok yok" anlamına gelen bir hata verir. Benzer şekilde bir for döngüsünde ilk satır 4 boşlukla girintilenip ikinci satır yanlışlıkla 6 boşlukla yazılırsa, bu sefer "beklenmeyen girinti" hatası ortaya çıkar; çünkü aynı blok içindeki satırların birbirine göre değil, birbirleriyle tam olarak aynı hizada olması gerekir. def fonksiyonlarında da aynı kural geçerlidir: fonksiyon gövdesindeki return satırı tanım satırıyla aynı hizada kalırsa Python bunun fonksiyonun bir parçası olduğunu anlayamaz.

Bu hataların hiçbiri mantık hatası değildir, sadece görünürlük meselesidir ve alışkanlık kazandıkça neredeyse hiç yapılmaz hale gelir. Girinti mantığını örneklerle, bire bir geri bildirim alarak pekiştirmek isteyenler için birebir Python dersleri bu tür küçük ama can sıkıcı hataları daha en baştan alışkanlığa dönüştürmeyi hedefler.

Hata Türü Örnek Durum Çözüm
Eksik girinti if koşulundan sonraki satırın hiç içeri çekilmemesi Bloktaki tüm satırları en az bir tab veya 4 boşluk içeri almak
Fazladan girinti for döngüsü içindeki bir satırın diğerlerinden daha fazla içeride yazılması Aynı bloğa ait tüm satırları birebir aynı hizaya getirmek
else/elif hiza kayması else satırının, bağlı olduğu if ile farklı sütunda başlaması else/elif ifadesini ait olduğu if ile dikey olarak hizalamak
Fonksiyon gövdesinin girintisiz kalması def satırından sonra return ifadesinin sütun başında kalması Fonksiyon gövdesindeki tüm satırları tutarlı şekilde içeri çekmek

Girinti Seviyesi Tutarlılığı ve 4 Boşluk Kuralı

Girinti Seviyesi Tutarlılığı ve 4 Boşluk Kuralı

Python'da bir kod bloğu içindeki tüm satırların aynı girinti seviyesinde olması gerekir; yani "biraz içeride" gibi göreceli bir kavram yoktur, satırlar ya birebir aynı miktarda boşlukla başlar ya da hata alırsınız. Yıllar içinde Python topluluğunda yaygınlaşan pratik, her girinti seviyesi için 4 boşluk kullanmaktır. Bu bir zorunluluk değil, okunabilirliği artırdığı için yaygınlaşmış bir alışkanlıktır; siz 2 boşluk da kullansanız kod çalışır, yeter ki dosya boyunca tutarlı olsun.

İşte tam da burada işler karışabilir: aynı dosyada bazı bloklarda 2 boşluk, bazılarında 4 boşluk kullanmak görsel olarak "doğru" görünse bile Python'ın karakter karşılaştırmasını bozar. Örneğin aşağıdaki fonksiyonu düşünelim:

def topla(a, b):
    sonuc = a + b
      return sonuc

Burada sonuc = a + b satırı 4 boşlukla, return sonuc satırı ise 6 boşlukla başlamış. Ekranda ikisi de "biraz içeride" gibi görünse bile Python bu iki satırı aynı bloğun parçası olarak kabul etmez ve hata verir. Aynı sorun, bir fonksiyonun bir bölümünü 2 boşlukla yazıp başka bir bölümünü kopyala-yapıştır yoluyla 4 boşluklu bir yerden alıp eklediğinizde de ortaya çıkar; gözle bakınca fark edilmesi çoğu zaman zordur.

Bu yüzden pratik bir kural şudur: bir dosyaya, bir fonksiyona veya bir projeye hangi girinti miktarıyla başladıysanız, sonuna kadar aynısını kullanın. İç içe geçmiş bloklarda (örneğin bir for döngüsünün içinde bir if varsa) her yeni seviye, bir önceki seviyenin üzerine aynı miktarda eklenir; yani dıştaki blok 4 boşluksa, içteki blok 8 boşluk olur. Bu basit ritmi bir kez oturttuğunuzda, girinti seviyesiyle ilgili hataların büyük kısmı kendiliğinden ortadan kalkar.

Editör ve IDE Ayarlarıyla Girinti Hatalarını Önlemek

Girinti hatalarının büyük bir kısmı aslında insan hatası değil, editör ayarlarının varsayılan davranışından kaynaklanır. Örneğin bazı düzenleyiciler Tab tuşuna basıldığında gerçek bir tab karakteri ekler, bazıları ise bunu otomatik olarak boşluğa çevirir. Bu "tab-to-space" dönüşüm ayarını aktif hale getirmek, dosyanızda görünmez şekilde tab ve boşuk karakterlerinin karışmasını baştan engeller; çünkü siz ister tab'a basın ister boşluk tuşuna, editör her ikisini de aynı karaktere çevirip kaydeder.

Bunun yanında birçok modern editör, girinti gösterge çizgileri (indent guides) sunar; bu ince dikey çizgiler, hangi satırın hangi bloğa ait olduğunu görsel olarak işaretler. Bir satır bu çizgiyle hizalı değilse, hatayı Python'ı çalıştırmadan önce fark etme şansınız artar. VS Code, PyCharm, Sublime Text gibi yaygın kullanılan düzenleyicilerin hemen hepsinde bu özellik ya varsayılan olarak açıktır ya da ayarlardan birkaç tıkla etkinleştirilebilir.

Girinti kaynaklı hataları en baştan azaltmak isteyenler için önerilen birkaç temel editör ayarı şöyle sıralanabilir:

  • "Insert Spaces" veya "Tabs to Spaces" seçeneğini aktif ederek her tab basışının boşluğa dönüşmesini sağlamak
  • Tab genişliğini (tab size) 4 karakter olarak sabitlemek ve tüm proje boyunca değiştirmemek
  • Girinti gösterge çizgilerini (indent guides) ve varsa "aktif blok vurgulama" özelliğini açık tutmak
  • Dosya kaydedilirken satır sonu boşluklarını otomatik temizleyen bir eklenti kullanmak
  • Python dosyaları için basit bir linter (örneğin flake8 veya pylint) çalıştırarak tutarsız girintileri kod çalıştırılmadan önce yakalamak

Bu ayarları bir kez yapılandırdıktan sonra editör, sizin yerinize sessizce çalışır ve girinti hataları büyük ölçüde geçmişte kalır. Bu tür pratik alışkanlıkları adım adım, gerçek örnekler üzerinden pekiştirmek isteyenler online Python video eğitimlerimiz aracılığıyla kendi hızlarında ilerleyebilir.

Hatayı Fark Etme ve Hızlı Düzeltme Alışkanlıkları

Python bir IndentationError fırlattığında aslında elinizde çok değerli bir bilgi vardır: hatanın tam olarak hangi satırda olduğu. Terminalde veya editör konsolunda karşınıza çıkan hata mesajı genellikle şuna benzer bir yapı taşır:

  File "ornek.py", line 7
    print(sayi)
    ^
IndentationError: unexpected indent

Buradaki line 7 ifadesi, Python yorumlayıcısının sorunu fark ettiği satır numarasıdır. Yeni başlayanların sık yaptığı hata, hatanın gösterildiği satırın kendisinin "bozuk" olduğunu düşünüp sadece o satırı incelemektir. Oysa çoğu zaman asıl sorun bir üst satırda, yani bloğu başlatan if, for ya da def satırında ya da o satırdan hemen önceki girinti seviyesindedir. Python size "burada bir tutarsızlık gördüm" der, ama tutarsızlığın kaynağı bir önceki satırların girinti düzenidir.

Hata mesajının sonundaki açıklama kısmı da ipucu taşır. unexpected indent genellikle gereksiz yere fazladan girinti yapıldığını, expected an indented block ise bir bloğun içine hiç girinti verilmediğini işaret eder. Bu iki ifadeyi ayırt etmeyi öğrenmek, hatayı çözme sürenizi ciddi biçimde kısaltır.

Girinti hatalarıyla karşılaştığınızda izleyebileceğiniz sistematik bir yaklaşım, paniklemeden ve rastgele boşluk eklemeden sorunu çözmenizi sağlar:

  1. Hata mesajındaki satır numarasını not edin ve o satıra gidin.
  2. O satırdan bir önceki satıra da bakın; bloğu başlatan ifade (iki nokta ile biten satır) doğru mu kontrol edin.
  3. Aynı bloğa ait tüm satırların girinti seviyesinin birebir aynı olduğundan emin olun.
  4. Editörünüzde gizli karakterleri gösterme özelliğini açarak tab ve boşluk karışımı olup olmadığını kontrol edin.
  5. Şüpheli bölgedeki girintiyi tamamen silip editörünüzün otomatik girinti özelliğiyle yeniden oluşturun.
  6. Sorun devam ediyorsa editörünüzün girinti ayarlarını (tab genişliği, boşluk kullanımı) gözden geçirin.

Bu adımları birkaç kez uyguladıktan sonra, hata mesajını okuma refleksiniz otomatikleşir ve girinti sorunlarını saniyeler içinde tespit etmeye başlarsınız. Bu tür pratik yapma alışkanlığınızı ölçmek isterseniz ücretsiz kodlama bilgisi testi ile mevcut seviyenizi görebilir ve hangi konularda daha çok pratiğe ihtiyacınız olduğunu fark edebilirsiniz.

IndentationError Öğrenme Sürecinin Doğal Bir Parçasıdır

Eğer bu yazıyı okuma sebebiniz art arda aldığınız IndentationError hatalarıysa, rahat olun: bu hata Python öğrenen hemen hemen herkesin defalarca karşılaştığı, tamamen sıradan bir deneyimdir. Girinti tabanlı bir dilde kod yazmak, özellikle önceden süslü parantez kullanan bir dile aşinaysanız ya da hiç programlama deneyiminiz yoksa, gözünüzün ve elinizin alışması zaman alan bir beceridir. Bu hatayı almak, yeteneksizlik ya da dikkatsizlik göstergesi değildir; tam tersine, kodu gerçekten çalıştırıp denediğinizin bir kanıtıdır. Deneyimli geliştiriciler bile yorgun oldukları anlarda ya da farklı editörler arasında geçiş yaptıklarında zaman zaman girinti hatası alırlar. Aradaki fark, deneyimli birinin hata mesajını okuyup sorunu saniyeler içinde çözmesi, yeni başlayanın ise bu süreci öğrenmesidir. Siz de bu yazıda anlatılan adımları birkaç kez uyguladıkça, aynı hızla çözüme ulaşacaksınız.

Girinti mantığını ve genel Python kod bloğu kurallarını daha sağlam bir zemine oturtmak, sonraki konularda (döngüler, fonksiyonlar, sınıflar) çok daha rahat ilerlemenizi sağlar. Eğer bu tür temel kavramları birebir geri bildirim alarak, kendi hızınızda ve kendi hatalarınız üzerinden pekiştirmek isterseniz, 1-1 özel ders desteğiyle bu süreci çok daha az sancılı hale getirebilirsiniz. Unutmayın, her deneyimli yazılımcı bir zamanlar aynı hatayı defalarca almıştır; önemli olan pes etmeden pratiğe devam etmektir.

Sık Sorulan Sorular

IndentationError ile SyntaxError arasındaki fark nedir?

IndentationError aslında SyntaxError'ın özel bir türüdür ve yalnızca girinti (boşluk/tab düzeni) kaynaklı sözdizimi sorunlarında ortaya çıkar. Genel SyntaxError ise eksik iki nokta, kapatılmamış parantez gibi girintiyle ilgisi olmayan yazım hatalarını kapsar.

Aynı dosyada tab ve space karıştırırsam Python her zaman hata verir mi?

Görsel olarak aynı görünen girintiler bile arka planda tab ve boşluk karışımı içeriyorsa Python bunu tutarsız kabul edebilir ve hata verebilir. Bazı durumlarda kod çalışır gibi görünse de bu risk her zaman vardır, bu yüzden bir dosyada yalnızca tek bir yöntemi tutarlı biçimde kullanmak en güvenli yaklaşımdır.

Neden bazen kod bana doğru görünürken IndentationError alıyorum?

Bunun en yaygın sebebi, editörünüzde tab karakterinin boşluklarla aynı genişlikte gösterilmesi, ancak Python'un bunları farklı karakterler olarak yorumlamasıdır. Gözünüz aynı hizada gördüğü satırları Python farklı girinti seviyesinde algılayabilir.

4 boşluk yerine 2 boşluk kullanmak hataya yol açar mı?

Hayır, tek başına 2 boşluk kullanmak hata sebebi değildir; önemli olan seçtiğiniz girinti miktarını dosya boyunca tutarlı biçimde uygulamaktır. 4 boşluk yaygın bir tercih olsa da, tutarlılık her zaman belirli bir sayıdan daha kritiktir.

Editörümde girinti ayarlarını nasıl kontrol edebilirim?

Çoğu modern editörde ayarlar menüsünden tab genişliğini ve "tab tuşuna basınca boşluk ekle" seçeneğini bulabilirsiniz. Ayrıca gizli karakterleri gösteren bir görünüm modu açarak satırlardaki tab ve boşlukları görsel olarak ayırt edebilirsiniz.

IndentationError aldığımda ilk olarak nereye bakmalıyım?

Hata mesajında belirtilen satır numarasına ve hemen bir üstündeki bloğu başlatan satıra bakmanız en hızlı çözüm yoludur. Genellikle sorun, o iki satır arasındaki girinti tutarsızlığından kaynaklanır.

Bu hatayı sürekli yapmam normal mi, deneyimsizlik mi gösteriyor?

Bu tamamen normaldir ve yeni başlayanların doğal öğrenme sürecinin bir parçasıdır. Zamanla elleriniz ve gözünüz girinti düzenine alıştıkça bu hatayı çok daha az sıklıkla alacaksınız.

Girinti mantığı, Python'u anlamlı ve okunabilir kılan temel kurallardan biridir; bu hatalarla karşılaşmak öğrenme yolculuğunuzun sağlıklı bir parçasıdır. Girinti konusunu pekiştirdikten sonra Python'daki temel kavramları daha geniş bir çerçevede test etmek isterseniz Python bilgi testi ile mevcut seviyenizi ölçebilirsiniz.

Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

İlgili Eğitimler

Berk Keskin — Yazılım Geliştirici ve Eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; bugün öğrencinin seviyesine ve hedefine göre şekillenen sürdürülebilir öğrenme sistemleri tasarlıyor. 300'den fazla kişiye ezber değil, düşünerek kod yazmayı öğretti — Berk Akademi'de izlemeye değil üretmeye dayalı öğrenme kültürünü o kuruyor.

WhatsApp Hemen Ara