Python

Python try except Kullanımı – Python Hataları Yakalama

Bu Python Dersleri serimizde Python’da istisnaları ele alacağız.

Bir Python programı, bir hatayla karşılaştığı anda sona erer. Python’da bir hata, bir sözdizimi hatası veya bir istisna olabilir. Bu yazıda, bir istisnanın ne olduğunu ve bir sözdizimi hatasından nasıl farklı olduğunu göreceksiniz. Bundan sonra, istisnalar oluşturmayı ve assertion bulunmayı öğreneceksiniz. Ardından, try ve except bloğunun bir gösterimi ile bitireceksiniz.

İstisna ve Sözdizimi Hataları

Parse yanlış bir ifade algıladığında sözdizimi hataları oluşur. Aşağıdaki örneğe dikkat edin:

Ok, ayrıştırıcının sözdizimi hatasıyla karşılaştığı yeri gösterir. Bu örnekte, bir parantez çok fazlaydı. Kaldırın ve kodunuzu tekrar çalıştırın:

Bu sefer bir istisna hatasıyla karşılaştınız. Bu tür bir hata, sözdizimsel olarak doğru Python kodu bir hatayla sonuçlandığında ortaya çıkar. Mesajın son satırı, ne tür bir istisna hatasıyla karşılaştığınızı belirtir.

Python, mesaj istisna hatasını göstermek yerine, ne tür bir istisna hatasıyla karşılaşıldığını detaylandırır. Bu durumda, bir ZeroDivisionError idi. Python, çeşitli yerleşik istisnaların yanı sıra kendi kendini tanımlayan istisnalar oluşturma olanağıyla birlikte gelir.

Python try except Kullanımı
Python try except Kullanımı

İstisna Oluşturma

Bir koşul oluşursa bir istisna atmak için yükseltme kullanabiliriz. İfade özel bir istisna ile tamamlanabilir.

Kod çalıştırıldığında bir istisna oluşacak ve aşağıdaki gibi hata mesajı verecektir.

AssertionError İstisnası Oluşturma

Bir programın yarıda çökmesini beklemek yerine Python’da bir iddiada bulunarak da başlayabilirsiniz. Belirli bir koşulun karşılandığını iddia ediyoruz. Bu koşulun Doğru olduğu ortaya çıkarsa, bu harika! Program devam edebilir. Koşul False olarak çıkarsa, programın AssertionError istisnası atmasını sağlayabilirsiniz.

Python Try ve Except Blokların Sözdizimi

Python’daki try ve except ifadelerinin sözdizimini anlayarak başlayalım. Genel şablon aşağıda gösterilmiştir:

Blokların ne için kullanıldığına bakalım:

try: try bloğu, yürütmeyi denemek istediğiniz ifadelerin bloğudur. Ancak, bir istisna nedeniyle çalışma zamanı hataları olabilir ve bu blok istendiği gibi çalışmayabilir.

except: Bir istisna nedeniyle try bloğu başarısız olduğunda istisna bloğu tetiklenir. Try bloğunda neyin yanlış gittiğine dair size genellikle bir bağlam sağlayan bir dizi ifade içerir.

Yukarıdaki snippet’te yer tutucusu tarafından belirtilen istisna bloğu içinde istisna olarak yakalamayı düşündüğünüz hata türünden(type error) her zaman bahsetmelisiniz. Ancak belirtmeden de kullanabilirsiniz. Ancak, oluşabilecek farklı hata türlerini hesaba katmadığınız için bu önerilen bir uygulama değildir.

Örneğin, aralık dışında bir dizin kullanarak bir listeye erişiyor, yanlış bir sözlük anahtarı kullanıyor ve var olmayan bir dosyayı açmaya çalışıyor olabilirsiniz.

Bu durumda IndexError, KeyError ve FileNotFoundError ile karşılaşabilirsiniz. Ve her hata türü için bir tane olmak üzere, tahmin ettiğiniz hata sayısı kadar dış blok eklemelisiniz.

else: else bloğu, yalnızca try bloğu hatasız yürütülürse tetiklenir. Bu, try bloğu başarılı olduğunda bir takip eylemi yapmak istediğinizde faydalı olabilir. Örneğin, bir dosyayı başarıyla açmaya çalışırsanız, içeriğini okumak isteyebilirsiniz.
finally: finanlly bloğu, diğer bloklarda ne olduğuna bakılmaksızın her zaman yürütülür. Bu, belirli bir kod bloğunun yürütülmesinden sonra kaynakları boşaltmak istediğinizde kullanışlıdır.

Önümüzdeki birkaç dakika içinde, Python’daki istisnaları ele almak için şimdiye kadar öğrendiklerinizi kullanacaksınız. Hadi başlayalım.

try ve except Blokları: İstisnaları İşleme

Python’daki try ve except bloğu, istisnaları yakalamak ve işlemek için kullanılır. Python, programın “normal” bir parçası olarak try ifadesinin ardından kodu yürütür. except ifadesini izleyen kod, programın önceki try yan tümcesindeki istisnalara verdiği yanıttır.

Yukarıdaki örnekte ad değişkeni tanımlanmadığı halde program hata vermeden çalışmaya devam edecektir.

Yukarıdaki basit örnek pek işlevsel görünmüyor. Gerçek bir örnekle devam edelim. Bir dosyayı açıp yerleşik bir istisna kullandığınız başka bir örnek:

file.log dosyası yoksa aşağıdaki gibi bir uyarı verecektir.

Python’da yerleşik bir çok istisna türü vardır. Burada oluşan istisna FileNotFoundError istisnasıdır. Eğer sadece bu istisnayı kontrol etmek istiyorsanız FileNotFoundError istisnasını eklemelisiniz.

Bu tür bir istisnayı yakalamak ve ekrana yazdırmak için aşağıdaki kodu kullanabilirsiniz:

Try yan tümcenizde birden fazla işlev çağrısı olabilir ve çeşitli istisnaları yakalamayı bekleyebilirsiniz. Burada dikkat edilmesi gereken nokta, try yan tümcesindeki kodun bir istisna ile karşılaşıldığında duracağıdır.

Aşağıdaki koda bakın. Burada önce int ve string türünde iki değeri toplamayı ve ardından bir dosya açmayı denersiniz: (TypeError veFileNotFoundError istisnaları devreye girer)

TypeError hatası devreye girer ve try içindeki diğer kod yürtülmez.

else Bloğu

Python’da, else deyimini kullanarak, bir programa yalnızca istisnalar olmadığında belirli bir kod bloğunu yürütmesini söyleyebilirsiniz.

Eğer hatalı kod yazacak olursak else çalışmayacak ve except istisna üretecektir.

finally Bloğu

Kodunuzu yürüttükten sonra temizlemek için her zaman bir tür eylem uygulamak zorunda olduğunuzu hayal edin. Python, nihayet yan tümcesini kullanarak bunu yapmanızı sağlar.

Aşağıdaki örneğe bir göz atın:

Eğer dosya yoksa şöyle bir ekran çıktısı oluşacaktır.

Python’da ZeroDivisionError Nasıl İşlenir

Aşağıda gösterilen bolme() fonksiyonu göz önünde bulundurun. İki argüman alır – sayi ve bolen ardından fonksiyon içinde sayi/bolen işlemini yapar ve sonucu döndürür.

Yukarıdaki program farklı sayılar ile çağrıldığında aşağıdaki gibi sonuçlar elde ederiz.

Bu kod, siz sıfıra bölmeyi deneyene kadar sorunsuz çalışır. Programı aşağıdaki gibi çalıştırdığımızda bir ZeroDivisionError atarak çöktüğünü görüyorsunuz.

Aşağıdakileri yaparak bu bölümü bir istisna olarak sıfırla işleyebilirsiniz:

try bloğunda, bolme() işlevine bir çağrı yapın. Özünde, sayi / bolen yapıyorsunuz.

exept blok içinde bir istisna olarak bolme() olduğunda durumu ele alın.

Bu örnekte, kullanıcıya sıfıra bölmeyi denediğini bildiren bir mesaj yazdırarak ZeroDivisionError‘ı hariç tutabilirsiniz.

Python’da TypeError Nasıl İşlenir?

Bu bölümde, Python’da bir TypeError‘ı işlemek için try ve except’i nasıl kullanabileceğinizi göreceksiniz.

Örnekte iki sayıyı alıp bunları toplayan uygulamayı göstereceğiz.

Program çalıştırıldığında her hangi bir istisna oluşturmadan aşağıdaki gibi çıktı üretecektir.

Her hangi bir sayı türündeki tüm işlemleri yapıyor fakat gönderdiğimiz sayı metinsel olarak (“10”) giderse metin+sayı işlemini yapamayacağı için TypeError istisnası fırlatacaktır.

can only concatenate str (not "int") to str iki stringi birleştireceğinizi tam sayıları yapamayacağınızı ifade etmektedir.

Şimdi kodumuza try except bloklarını ekleyerek hata mesajı verdirelim.

Özet

  • Sözdizimi hataları ve istisnalar arasındaki farkı gördükten sonra, Python’da istisnaları oluşturmanın, yakalamanın ve işlemenin çeşitli yollarını öğrendiniz. Bu makalede, aşağıdaki seçenekleri gördünüz:
  • raise, istediğiniz zaman bir istisna atmanıza izin verir.
  • assert, belirli bir koşulun karşılanıp karşılanmadığını doğrulamanıza ve değilse bir istisna oluşturmanıza olanak tanır.
  • try yan tümcesinde, bir istisna ile karşılaşılıncaya kadar tüm ifadeler yürütülür.
  • except, try yan tümcesinde karşılaşılan özel durum(lar)ı yakalamak ve işlemek için kullanılır.
  • else, yalnızca try yan tümcesinde hiçbir özel durumla karşılaşılmadığında çalışması gereken bölümleri kodlamanıza izin verir.
  • finally, daha önce karşılaşılan istisnalar olsun veya olmasın, her zaman çalışması gereken kod bölümlerini yürütmenizi sağlar.

1 Yorum

Yorum yapmak için tıklayın