Python'da AttributeError: 'list' object has no attribute 'add' hatası, liste olan bir değişkene add() metodunu çağırdığında ortaya çıkar; çünkü add listelere değil kümelere (set) aittir. Değişken liste olarak kalacaksa add yerine append kullan. Amacın tekrarsız, benzersiz elemanlardan oluşan bir küme ise bu kez veri yapısını ayrıca değerlendirmen gerekir.
Hata mesajı ne söylüyor?
Hatanın tam metni şöyledir:
AttributeError: 'list' object has no attribute 'add'
Mesaj üç parçadan oluşur ve her biri sana bir ipucu verir:
- AttributeError: hata türü. Bir nesnede bulunmayan bir özelliğe ya da metoda erişildi.
- 'list' object: nesne türü.
addçağrılan nesne bir liste. - no attribute 'add': eksik özellik adı. Liste türünde
addadlı bir metot tanımlı değil.
Şimdi hatayı üreten iki satırı mesajla eşleştirelim:
sayilar = [1, 2, 3]
sayilar.add(4)
Birinci satır sorunsuz çalışır; köşeli parantez, sayilar değişkenine bir liste atar. Hata ikinci satırda ortaya çıkar: Python sayilar nesnesinin türüne bakar ('list'), o türde add metodunu arar ('add') ve bulamayınca AttributeError fırlatır.
Bu yazı yalnızca bu mesajı ele alıyor; AttributeError ile başlayan diğer mesajların nedenleri farklıdır ve ayrı konulardır.
Adım adım teşhis: hata satırından doğru veri yapısına

Hatayı çözmeden önce değişkenin gerçekten ne olduğunu ve ne olmasını istediğini netleştirmek işi kolaylaştırır. Şu akışı izleyebilirsin:
- Hata satırını bul. Python'ın verdiği hata çıktısında
lineile başlayan satır numarasına bak;addçağrısı orada. - Değişkenin türünü doğrula. Şüphelendiğin değişken için
print(type(degisken))çalıştır. Liste ise çıktı<class 'list'>olur. - Amacına karar ver. Elemanların sırası ve tekrarı önemliyse liste, her elemanın yalnızca bir kez bulunması gerekiyorsa küme işine yarar.
- Seçime göre ilerle. Liste kalacaksa
appendkullan. Küme istiyorsan değişkenisetolarak tanımla, sonraaddkullan.
İkinci adımın küçük bir örneği:
sayilar = [1, 2, 3]
print(type(sayilar))
Beklenen çıktı:
<class 'list'>
Bu çıktıyı görüyorsan add çağrısının neden hata verdiği kesinleşmiştir.
Bir ayrıntıya dikkat et: değişken, kodun başka bir yerinde yeniden atanarak liste haline gelmiş olabilir. Örneğin önce set() ile oluşturulan bir değişkene sonradan [] atanmış olabilir. Bu yüzden type() kontrolünü dosyanın başına değil, hata veren satırın hemen öncesine koy; böylece o anki gerçek türü görürsün.
Çözüm: append ile düzeltilmiş kod ve beklenen çıktı

Değişkenin bir liste olduğunu doğruladıysan düzeltme tek kelimelik: add yerine append yaz. Liste sona eleman ekleme işini bu metotla yapar.
sayilar = [1, 2, 3]
sayilar.append(4)
print(sayilar)
Beklenen çıktı:
[1, 2, 3, 4]
Amacın baştan benzersiz elemanlardan oluşan bir küme tutmaksa, değişkeni küme olarak tanımlayıp add kullanabilirsin:
sayilar = {1, 2, 3}
sayilar.add(4)
print(sayilar)
Beklenen çıktı:
{1, 2, 3, 4}
Kümelerde elemanların sırası garanti edilmez; ekranda değerler farklı sırayla görünebilir. Bu bir hata değildir, kümenin doğasıdır. Temel veri yapılarını pekiştirmek istiyorsan ücretsiz Python bilgi testiyle liste, küme ve diğer konulardaki seviyeni ölçebilirsin.
Liste mi küme mi: add ile append neden ayrı?
Metot adları rastgele seçilmemiştir; veri yapısının çalışma mantığını yansıtır. Liste sıralıdır ve aynı değeri birden fazla kez tutabilir. Yeni eleman her zaman listenin sonuna eklenir, bu yüzden metodun adı append (sona ekle) olur. Küme ise yalnızca benzersiz elemanlardan oluşur. Zaten var olan bir değeri eklersen küme değişmez; bu yüzden metot yalnızca add (kümeye kat) adını taşır.
Farkı aynı değeri iki kez ekleyerek görebilirsin:
liste = [1, 2, 3]
liste.append(4)
liste.append(4)
print(liste)
kume = {1, 2, 3}
kume.add(4)
kume.add(4)
print(kume)
Beklenen çıktı (küme çıktısında sıra değişebilir):
[1, 2, 3, 4, 4]
{1, 2, 3, 4}
Liste ikinci 4'ü de tuttu; küme ise tek bir 4 ile kaldı. Dolayısıyla hata mesajındaki 'list' object has no attribute 'add' ifadesi, listenin kümeye özgü bir metodu tanımadığını söyler. Önce verinin nasıl davranmasını istediğine karar ver: tekrarlara izin verilecekse liste ve append, tekrarsız bir yapı gerekiyorsa küme ve add doğru seçimdir.
Boş küme tanımında sık yapılan karışıklık: {} ne oluşturur?
Süslü parantez kümeyi akla getirdiği için {} yazınca boş küme oluştuğunu düşünmek kolaydır. Oysa Python'da boş {} bir sözlük (dict) oluşturur. Boş küme için set() yazman gerekir.
a = {}
print(type(a))
b = set()
print(type(b))
Beklenen çıktı:
<class 'dict'>
<class 'set'>
Boş kümeyi {} ile kurup ardından add çağırırsan 'dict' object has no attribute 'add' mesajını alırsın. Mesajın yapısı liste hatasına benzer, ama nesnenin türü farklıdır.
b = set()
b.add(5)
b.add(5)
print(b)
Çıktı {5} olur; küme aynı elemanı ikinci kez eklemez.
Bir değişkenin türünden emin olmadığında önce print(type(değişken)) yazmayı alışkanlık edinebilirsin. Bu tek satır, hangi metotları çağırabileceğini baştan gösterir ve hata mesajını aramadan önce nedeni çoğu zaman netleştirir.
Veri yapılarını tek tek denerken türü kontrol etmek, ilk alıştırmalardan itibaren işini kolaylaştırır. Python'a yeni başlıyorsan ücretsiz Python bilgi testiyle liste, küme ve sözlük konusundaki seviyeni ölçebilirsin.