Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

python 'list' object is not callable hatası nasıl çözülür?

python-list-object-is-not-callable-hatasi-nasil-cozulur
Bu yazıda neler var?
  1. Python neden listeyi fonksiyon gibi çağırır?
  2. Hatanın yaygın kod örnekleri nasıl düzeltilir?
  3. Traceback ve type() ile kök neden nasıl bulunur?
  4. Düzeltme sonrası hangi kontroller yapılmalı?
  5. Sık Sorulan Sorular

Python ’list’ object is not callable hatası, bir listenin fonksiyon gibi yuvarlak parantezle çağrılması veya bir fonksiyon adının daha sonra listeyle ezilmesi sonucunda oluşur. Liste elemanına erişirken köşeli parantez, fonksiyon çağırırken yuvarlak parantez kullanılır.

Örneğin liste(0) yazıldığında Python, liste değişkeninin çağrılabilir bir fonksiyon olduğunu düşünür. Oysa değişken bir listeyse doğru kullanım liste[0] biçimindedir.

Python neden listeyi fonksiyon gibi çağırır?

Python neden listeyi fonksiyon gibi çağırır?

Python’da parantez türü, yazdığın ifadenin amacını belirler. Köşeli parantez bir listenin belirli indeksindeki elemana erişmek için kullanılır. Yuvarlak parantez ise bir fonksiyonu çalıştırmak, yani çağırmak anlamına gelir.

Yazım Anlam Kısa örnek
liste[0] Listenin ilk elemanına erişir. [10, 20][0]10
fonksiyon() Fonksiyonu çağırır. selamla() → Fonksiyon çalışır.

Liste elemanına erişmek için liste(0) değil, liste[0] yazılır.

Hatanın yaygın kod örnekleri nasıl düzeltilir?

1. Listeyi doğrudan fonksiyon gibi çağırmak

Bu senaryoda hata, aynı ismin yeniden atanmasından değil, listenin yanlış parantezle kullanılmasından kaynaklanır.

liste = [10, 20]
print(liste(0))

liste bir fonksiyon olmadığı için Python şu hatayı verir: TypeError: 'list' object is not callable.

Düzeltilmiş kod:

liste = [10, 20]
print(liste[0])

Beklenen çıktı: 10

2. Fonksiyon adını listeyle yeniden atamak

Buradaki hata, önce fonksiyon olarak tanımlanan toplam adının daha sonra bir listeyle ezilmesinden oluşur.

def toplam():
    return 30

toplam = [10, 20]
print(toplam())

Son satırda toplam() çağrıldığında Python artık fonksiyonu değil, listeyi bulur. Bu nedenle hata parantezden çok, aynı ismin yeniden atanmasıyla ilgilidir.

Düzeltilmiş kod:

def toplam():
    return 30

sayilar = [10, 20]
print(toplam())

Beklenen çıktı: 30

3. list yerleşik adını değişken olarak kullanmak

list, Python’da liste oluşturmada kullanılabilen yerleşik bir addır. Bu adı değişken olarak kullanmak, yerleşik işlevle değişken arasında isim çakışmasına yol açabilir.

list = [1, 2, 3]
harfler = list("abc")
print(harfler)

Bu örnekte list artık yerleşik işlevi değil, [1, 2, 3] listesini gösterir. Bu nedenle list("abc") ifadesi listeyi fonksiyon gibi çağırmaya çalışır.

Düzeltilmiş kodda liste değişkenine daha açıklayıcı bir ad verilir:

items = [1, 2, 3]
harfler = list("abc")
print(harfler)

Beklenen çıktı: ['a', 'b', 'c']

Traceback ve type() ile kök neden nasıl bulunur?

Traceback ve type() ile kök neden nasıl bulunur?

Bu hatayı çözerken yalnızca hata mesajına bakmak yerine traceback satırını, parantezden önceki ismi ve o ismin veri türünü birlikte incelemek gerekir. Böylece sorunun yanlış sözdizimi mi, isim çakışması mı yoksa daha önce yapılmış bir atama mı olduğu anlaşılır.

  1. Traceback satırını bul: Dosya ve satır numarasını gösteren bölümde, hatayı tetikleyen ifadeyi belirle. Özellikle parantezden önce hangi ismin bulunduğuna bak.
  2. Son hata mesajını yorumla: TypeError: 'list' object is not callable mesajı, bir liste nesnesinin fonksiyon gibi çağrılmaya çalışıldığını söyler.
  3. Veri türünü kontrol et: Parantezden önceki isim için print(type(liste)) çalıştır. Çıktı <class 'list'> ise bu isim bir listedir.
  4. İsmin geçmişini ara: Aynı ismin nerede tanımlandığını ve daha sonra yeniden atanıp atanmadığını kontrol et. Bir fonksiyon adı, sonraki bir satırda listeyle ezilmiş olabilir. Etkileşimli ortamlarda daha önce çalıştırılmış hücreler de bu duruma yol açabilir.
  5. Amacı belirle: Eleman okumak istiyorsan köşeli parantez, fonksiyon çalıştırmak istiyorsan normal parantez kullanılır.
  6. Düzeltip yeniden çalıştır: Kodun beklenen çıktıyı üretip üretmediğini kontrol et. Hata devam ederse traceback'teki yeni satırı yeniden incele.
“Liste elemanına erişmek için liste(0) değil, liste[0] yazılır.”

Aşağıdaki iki çıktı, teşhis için birlikte okunmalıdır:

liste = ["Python", "Java"]

print(type(liste))
print(liste[0])
<class 'list'>
Python

type(liste) çıktısı listenin gerçekten bir liste olduğunu, liste[0] çıktısı ise ilk elemana erişimin doğru biçimde yapıldığını gösterir. Traceback aynı değişkenin liste(0) biçiminde kullanıldığını söylüyorsa sorun, listenin fonksiyon gibi çağrılmasıdır. Fonksiyon adıyla liste adı aynı hâle geldiyse, daha önceki atamaları bulup isimleri ayırmak gerekir.

Bu teşhis akışını kendi örneklerinle uyguladıktan sonra temel Python bilginin hangi konularda güçlenmesi gerektiğini görmek için Python bilgi ve seviye testleri sayfasını kullanabilirsin.

Düzeltme sonrası hangi kontroller yapılmalı?

Hata düzeltildikten sonra yalnızca kodun çalışması yeterli değildir. Aynı sorunun farklı bir satırda yeniden oluşmaması için şu üç soruyu cevapla:

  1. Eleman mı okuyorum? Liste elemanına erişirken [], fonksiyon çağırırken () kullandım mı?
  2. Çağırdığım isim gerçekten fonksiyon mu? type() veya gerekirse callable() ile kontrol ettim mi? Liste ve fonksiyon için ogrenciler ve hesapla gibi farklı, açıklayıcı isimler seçtim mi?
  3. Çalışma ortamı temiz mi? Traceback'teki satırı yeniden kontrol ettim mi? Etkileşimli ortamda eski bir atamanın kalmadığından emin olmak için ilgili kodu baştan çalıştırdım mı?

Python temellerini daha sistematik ve uygulamalı biçimde çalışmak istersen, birebir Python yazılım kursu sayfası doğal bir sonraki adım olabilir.

Sık Sorulan Sorular

liste[0] kullanınca IndexError alırsam bu hata, 'list' object is not callable hatasıyla aynı mıdır?

Hayır, iki hata farklıdır. IndexError, listede istenen indeksin bulunmadığını gösterir; örneğin boş bir listede liste[0] kullanmak buna yol açabilir. TypeError: 'list' object is not callable ise listenin liste(0) gibi fonksiyon çağrısı biçiminde kullanılmasından kaynaklanır.

Kod doğru göründüğü hâlde fonksiyon adının listeyle ezildiğini nasıl kesinleştirebilirim?

Parantezden önceki ismi print(type(isim)) ve print(callable(isim)) ile kontrol et. Tür list ve sonuç False ise isim artık çağrılabilir bir fonksiyonu göstermiyordur. Ardından kodda ve etkileşimli çalışma ortamındaki önceki satırlarda isim = atamalarını arayarak hangi satırda listenin bu adı devraldığını bulabilirsin.

Traceback, hata mesajı ve veri türünü birlikte okumak, bu hatayı tahmin etmek yerine doğrudan kök nedeninden çözmeni sağlar.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İ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ı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara