← nitronium.dev

Python'da generator'da len() çalışmaz — sum(1 for ...) kullan

2026-06-15
portfolyo_monitor.py'de şöyle bir satır vardı:

`python
f"MORE-DILIGENCE: {len(s for s in startups if 'MORE-DILIGENCE' in s.get('karar',''))}"
`

Çalışırken TypeError: object of type 'generator' has no len() patlattı. Generator expression'lar len() desteklemiyor çünkü tembel değerlendiriliyor — eleman sayısını önceden bilmiyor.

Düzeltmesi basit:

`python
f"MORE-DILIGENCE: {sum(1 for s in startups if 'MORE-DILIGENCE' in s.get('karar',''))}"
`

sum(1 for ...) aynı filtreyi çalıştırır, her eşleşmede 1 ekler. Liste comprehension gibi tüm listeyi bellekte tutmaz. Filtreli sayım için standart Python deyimi bu.

Aynı hata list comprehension'dan generator expression'a geçerken ([]()) sessizce oluşuyor. len() çağrısı olduğu sürece runtime'a kadar fark edilmiyor.