Python TabError: inconsistent use of tabs and spaces in indentation hatası, aynı kod bloğunda sekme karakteri ile boşluk karakterinin tutarsız biçimde birlikte kullanılmasından kaynaklanır. Çözüm için ilgili satırların başındaki girintiyi tek bir biçime dönüştürmen gerekir. Python kodlarında genellikle dört boşluk kullanmak ve sekme karakterini girinti için kullanmamak tercih edilir.
Girinti, kod satırının başında bulunan boşluk düzenidir. Python, if, for, while ve fonksiyonlar gibi yapıların sınırlarını bu düzenle belirlediği için hizalama yalnızca görsel bir düzen değildir.
TabError mesajı ne anlatır ve girinti neden önemlidir?
TabError mesajındaki inconsistent use of tabs and spaces in indentation ifadesi, girinti sırasında sekmelerle boşlukların tutarlı kullanılmadığını anlatır. Sekme karakteri, genellikle klavyedeki Tab tuşuyla eklenen özel bir yatay boşluk karakteridir. Boşluk karakteri ise Space tuşuyla eklenen ayrı karakterlerdir.
Python, girintiyi kullanarak hangi satırların aynı kod bloğuna ait olduğunu anlar. Örneğin aşağıdaki kodda print() satırı, if koşulunun altında yer alır ve başındaki dört boşluk bu ilişkiyi belirtir:
puan = 75
if puan >= 50:
print("Geçti")
print() satırının başındaki girinti kaldırılırsa Python bu satırın koşul bloğunun dışında mı, içinde mi olduğunu farklı yorumlayabilir. Bu nedenle girinti, kodun okunmasını kolaylaştıran bir biçimlendirme ayrıntısı olmanın yanında Python sözdiziminin de bir parçasıdır. Python belgeleri, girintinin satırların hangi kod grubuna ait olduğunu belirlediğini ve sekme ile boşlukların tutarsız karıştırılması durumunda TabError oluştuğunu açıklar.
Hata alındığında traceback bölümünün sonunda genellikle şu metni görürsün:
Traceback (most recent call last):
File "notlar.py", line 3
print("Geçti")
TabError: inconsistent use of tabs and spaces in indentation
Buradaki son satır hatanın türünü, dosya ve satır bilgisi ise Python’un sorunu hangi konumda fark ettiğini gösterir. Hata her zaman karışıklığın başladığı ilk satırda görünmeyebilir. Bu yüzden belirtilen satırın yanı sıra aynı blokta bulunan diğer satırların başındaki karakterleri de kontrol etmek gerekir.
TabError, girintiyle ilgili daha geniş hata ailesi olan IndentationError sınıfının bir alt türüdür. IndentationError: unexpected indent mesajında ise temel sorun genellikle satırın bulunduğu yapıya göre gereğinden fazla girintili olmasıdır. TabError için belirleyici nokta, girintide sekme ve boşluk kullanımının karışmasıdır.
Sekme ile boşluk neden aynı görünse de farklıdır?

Sekme karakteri ile boşluk karakteri editörde aynı hizaya gelmiş gibi görünebilir, ancak dosyanın içinde farklı karakterler olarak saklanırlar. Bir satırın başında bir sekme, başka bir satırın başında dört boşluk varsa ekranda aynı noktadan başlıyor gibi görünebilir. Python ise bu iki girinti biçimini her durumda aynı kabul etmez.
Örneğin bir kod parçasını internetten kopyalayıp kendi dosyana yapıştırdığında, kopyalanan satırlar sekmelerle, dosyandaki mevcut satırlar boşluklarla yazılmış olabilir. Benzer bir durum dosyayı farklı editörlerde açıp düzenlediğinde de ortaya çıkabilir. Editörlerin sekme genişliğini gösterme biçimi değişebildiği için gözle yapılan hizalama, dosyada hangi karakterlerin kullanıldığını her zaman göstermez.
Bu nedenle sorunu araştırırken satırların ekranda aynı hizada durup durmadığına bakmakla yetinme. Satır başlarında sekme karakteri mi, boşluk karakteri mi kullanıldığını kontrol et. Editördeki görünmez karakterleri gösterme seçeneği, sekmeleri ve boşlukları farklı işaretlerle belirginleştirerek karışık girintinin hangi satırlarda bulunduğunu anlamana yardımcı olur.
Hatalı ve düzeltilmiş not hesaplama kodu nasıl görünür?

Bu hata, aynı if bloğunda bir satırın sekme karakteriyle, başka bir satırın boşluk karakteriyle girintilenmesiyle oluşur. Python, girintiyi kod bloklarını ayırmak için kullandığı için bu iki karakter ekranda aynı hizada görünse bile kaynak kodda aynı kabul edilmeyebilir. Python belgelerinde girinti kuralları bu durumu TabError ile ilişkilendirir.
Aşağıdaki örnekte if proje >= 50: satırının altındaki ilk satır gerçek bir sekme karakteriyle, ikinci satır ise dört boşlukla başlar:
proje = 70
sinav = 80
if proje >= 50:
ortalama = (proje + sinav) / 2
print("Ortalama:", ortalama)
Dosya not_hesaplama.py adıyla çalıştırıldığında Python, karışık girintiyi ikinci gövdeli satırda bildirir. Bu örnekte satır numarası, kodun boş satırları korunarak yazılmasına bağlıdır:
Traceback (most recent call last):
File "not_hesaplama.py", line 6
print("Ortalama:", ortalama)
TabError: inconsistent use of tabs and spaces in indentation
Bu mesajı IndentationError: unexpected indent ile karıştırma. TabError aynı girinti düzeyinde sekme ve boşlukların karışmasına, unexpected indent ise beklenmeyen bir girinti düzeyinin kullanılmasına işaret eder.
Düzeltmek için iki satırın başındaki girintiyi de dört boşluk yapmalısın:
proje = 70
sinav = 80
if proje >= 50:
ortalama = (proje + sinav) / 2
print("Ortalama:", ortalama)
Bu kod çalıştığında beklenen çıktı Ortalama: 75.0 olur. Girintiyi göz kararı hizalamak yerine karakter türünü kontrol etmek önemlidir. İnternetten kopyalanan kodlarda da satırlar aynı hizada görünse bile sekme ve boşluk karışımı bulunabilir.
Gizli karakterleri görünür yapıp dosya nasıl düzeltilir?
Dosyayı düzeltmenin en güvenli yolu, görünmeyen boşluk ve sekme karakterlerini görünür hâle getirip ilgili girintileri tek biçime çevirmektir. Python kodunda girinti için dört boşluk kullanmak, bu kontrolü kolaylaştırır.
- Editörün ayarlarında veya editör arama kutusunda
render whitespace,show invisibles,insert spacesveindentation sizeifadelerini ara. - Sekme karakterlerini gösteren görünüm açıldığında, satır başlarında sekme işareti ile boşluk işaretlerinin birlikte kullanılıp kullanılmadığını kontrol et.
convert indentation,convert tabs to spacesveya benzer adlı dönüştürme seçeneğini kullanarak girintilerdeki sekmeleri dört boşluğa çevir.- VS Code kullanıyorsan
editor.renderWhitespaceayarıyla boşlukları görünür yapabilir,editor.insertSpacesayarını etkinleştiripeditor.tabSizedeğerini dört olarak belirleyebilirsin. Editörün girinti göstergesinde sekmeleri boşluklara dönüştürme komutu da bulunur. - IDLE kullanıyorsan
Untabify Region,Toggle TabsveNew Indent Widthseçeneklerini ara. Thonny'de de editör ayarlarında sekmeyle girintileme ve sekmeleri vurgulama seçeneklerini kontrol et. - Dosyayı kaydet, yeniden çalıştır ve aynı blokta bulunan satırların dört boşlukluk düzeni koruduğunu tekrar kontrol et.
Girinti dönüştürme işlemi, dosyadaki her gerçek sekme karakterini otomatik olarak değiştirmekle aynı şey olmayabilir. Özellikle tırnak içindeki metinlerde bulunan t kaçış dizilerini veya gerçek sekme karakterlerini ayrıca incele; kod girintisini düzeltirken metin içeriğini istemeden değiştirmemelisin.
Hata tekrar etmesin diye hangi alışkanlıklar işe yarar?
Yeni Python dosyalarında girinti için dört boşluk kullanmak, tutarlı bir başlangıç sağlar. PEP 8, her girinti seviyesinde dört boşluk kullanılmasını ve sekme ile boşluk karakterlerinin karıştırılmamasını önerir.
VS Code, IDLE veya Thonny kullanırken ayar arama kutusuna spaces, tabs, insert spaces ya da indent size yazarak ilgili seçenekleri bulabilirsin. Sekme tuşunun doğrudan sekme karakteri eklemesi yerine boşluk eklemesini sağlayan ayarı seçmek, yeni satırlarda tutarsızlık oluşma ihtimalini azaltır. tab size ve indent size değerlerini de kullandığın dosyanın düzeniyle uyumlu tutmalısın.
İnternetten kopyaladığın kodu çalıştırmadan önce görünmez karakterleri gösteren ayarı açman da yararlıdır. Editörde boşluk ve sekme işaretleri farklı sembollerle görünüyorsa, aynı blok içinde iki karakter türünün karışıp karışmadığını kolayca fark edebilirsin. Kod ekranda hizalı görünse bile Python'un satır başındaki karakterleri farklı yorumlayabileceğini unutma.
- Yeni dosyalarda girinti için boşluk kullanımını seç.
- Kopyalanan kodda sekme ve boşluk karakterlerini kontrol et.
- Satırları yalnızca göz kararı hizalamaya güvenerek düzenleme.
- Aynı kod bloğundaki satırların girinti seviyelerini karşılaştır.
- Bir satırı düzeltirken yalnızca görünen kısmı değil, satır başındaki karakterleri de temizle.
IndentationError: unexpected indent beklenmeyen bir girinti düzeyini, TabError ise girintide sekme ve boşlukların tutarsız biçimde karışmasını anlatır.
Python temellerini düzenli biçimde çalışmak isteyen lise öğrencileri, girinti ve blok yapısını uygulamalarla pekiştirmek için ücretsiz Sıfırdan Temel Python video eğitiminden yararlanabilir.
Sık Sorulan Sorular
TabError ile IndentationError: unexpected indent arasındaki temel fark nedir?
TabError, aynı girinti yapısında sekme ve boşlukların tutarsız biçimde kullanılmasından kaynaklanır. IndentationError: unexpected indent ise Python'un o satırda beklemediği bir girinti düzeyinin bulunduğunu gösterir.
Tüm sekmeleri dört boşluğa çevirmek her zaman doğru mudur?
Yeni veya karışık durumdaki bir dosyada sekmeleri dört boşluğa çevirmek genellikle uygun bir düzeltmedir. Ancak mevcut dosyanın tamamını kontrol etmeden yalnızca bazı satırları dönüştürmek, farklı girinti seviyeleri oluşturabilir.
Editörde sekme ve boşluk karakterlerini nasıl ayırt edebilirim?
Editör ayarlarında show whitespace, render whitespace veya benzer adlarla bulunan görünmez karakter gösterimini açabilirsin. Böylece sekme ve boşluklar farklı işaretlerle görünür ve satır başlarını karşılaştırabilirsin.
İnternetten kopyalanan Python kodunda bu hata neden oluşur?
Kopyalanan kod farklı bir editörde hazırlanmışsa satır başlarında sekme, boşluk veya karışık girinti bulunabilir. Kodun ekranda hizalı görünmesi, Python'un bütün satırları aynı karakter düzeniyle yorumladığı anlamına gelmez.
Girintiyi dosya boyunca aynı karakter düzeniyle kurmak ve görünmez karakterleri ara sıra kontrol etmek, TabError sorununu erken fark etmene yardımcı olur.