Python'da sadece if'ten değil, for ve while döngülerinden sonra da else yazabilirsiniz. Else bloğu, döngü "normal" bir şekilde tamamlandığında—break ile değil—çalışır. Bu, örneğin, bir öğe aramanın zarif bir şekilde uygulanmasını sağlar.
Örnek:
for x in range(5): if x == 3: print('break!') break else: print('Döngü break olmadan tamamlandı') # çalışmayacak
for x in range(5): if x == 10: break else: print('Döngü break olmadan tamamlandı') # çalışacak
Bu özellik genellikle "başarısız arama" için kullanılır: eğer break gerçekleşmediyse, öğe bulunamamıştır.
Döngü tamamlandığında her zaman else bloğu mu çalışır? Peki ya döngü boşsa?
Cevap: Evet, eğer break yoksa, else her zaman çalışır, döngü hiç bir zaman bodysine girmese bile:
for x in []: print('hiçbir şey') else: print('else!') # bu yazılacak
Hikaye
Proje: Belge ayrıştırıcı.
Sorun: Bir liste içinde anahtarı aradık ve döngüden sonra else dışında "bulunamadı" bayrağı koyduk. Sonuç olarak, öğe keşfi, break tetiklenmediği zaman yanlış çalışıyordu.
Hikaye
Proje: Benzersiz jetonların oluşturulması.
Sorun: Jeton oluşturma mantığı break ile düzgün bir çıkışa bağlıydı ve else yanlışlıkla "istisnai bir durum" olarak değerlendirildi, gerçekte %99 tetikleme ile gerçekleştiği için kullanıcı doğrulama mantığını bozuyordu.
Hikaye
Proje: Ağ API'si için test eden bir betik.
Sorun: while'dan sonraki else'i yanlış anlamaktan dolayı, onu zaman aşımını işlemek için kullandık, oysa döngü break ile bitmediği için zaman aşımını yakalayamıyorduk ve bu da testlerde "sessiz" hatalara neden oluyordu.