Python İstisna Kullanarak try, except ve finally İfadeleri
Bu öğreticide, Python programınızdaki istisnaları, örnekler yardımıyla try, hariç ve nihayet ifadeleri kullanarak nasıl ele alacağınızı öğreneceksiniz.
Python’daki İstisnalar
Python, programınız bir hatayla karşılaştığında (programda bir şeyler ters gittiğinde) ortaya çıkan birçok yerleşik istisnaya sahiptir.
Bu istisnalar meydana geldiğinde, Python yorumlayıcısı mevcut süreci durdurur ve işlenene kadar çağıran sürece iletir. Eğer ele alınmazsa, program çökecektir.
Örneğin, function çağıran ve sırayla function çağıran bir fonksiyonumuzun olduğu bir programı düşünelim . İşlevde bir kural dışı durum oluşur ancak içinde işlenmezse , kural dışı durum önce ve sonra ‘ye geçer .ABCCCBA
Hiç ele alınmadıysa, bir hata mesajı görüntülenir ve programımız aniden beklenmedik bir şekilde durur.
Python’da İstisnaları Yakalamak
try
Python’da istisnalar bir deyim kullanılarak işlenebilir .
İstisna oluşturabilecek kritik işlem, try
yan tümcenin içine yerleştirilmiştir. İstisnaları işleyen kod except
yan tümcede yazılmıştır.
Böylece istisnayı yakaladıktan sonra hangi işlemlerin gerçekleştirileceğini seçebiliriz. İşte basit bir örnek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # import module sys to get the type of exception import sys randomList = ['a', 0, 2] for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()[0], "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r) |
Çıktı
1 2 3 4 5 6 7 8 9 10 | <samp>giriş bir Hata! <class 'ValueError'> oluştu. Sonraki giriş. giriş 0 Hata! <sınıf 'ZeroDivisionError'> oluştu. Sonraki giriş. giriş 2 2'nin tersi 0,5'tir</samp> |
Bu programda, değerlerin arasında dolaşıyoruz.rastgele Listeliste. Daha önce de belirtildiği gibi, bir istisnaya neden olabilecek kısım try
bloğun içine yerleştirilir.
Herhangi bir istisna oluşmazsa, except
blok atlanır ve normal akış devam eder (son değer için). Ancak herhangi bir istisna oluşursa, blok tarafından yakalanır except
(birinci ve ikinci değerler).
Burada, modülün exc_info()
içindeki işlevi kullanarak istisnanın adını yazdırıyoruz . sys
Bunun a
sebeplerini ValueError
ve 0
sebeplerini görebiliriz ZeroDivisionError
.
Python’daki her istisna, temel sınıftan miras aldığından Exception
, yukarıdaki görevi aşağıdaki şekilde de gerçekleştirebiliriz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # import module sys to get the type of exception import sys randomList = ['a', 0, 2] for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except Exception as e: print("Oops!", e.__class__, "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r) |
Bu program yukarıdaki programla aynı çıktıya sahiptir.
Python’da Belirli İstisnaları Yakalamak
except
Yukarıdaki örnekte, maddede herhangi bir özel istisnadan bahsetmedik .
Bu, tüm istisnaları yakalayacağı ve her durumu aynı şekilde ele alacağı için iyi bir programlama uygulaması değildir. Bir yan tümcenin hangi istisnaları except
yakalaması gerektiğini belirleyebiliriz.
Bir try
yan tümce, farklı istisnaları işlemek için herhangi bir sayıda tümceye sahip olabilir except
, ancak bir istisna oluşması durumunda yalnızca biri yürütülür.
Bir istisna yan tümcesinde birden çok istisna belirtmek için bir değerler kümesi kullanabiliriz. İşte bir örnek sözde kod.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | try: # do something pass except ValueError: # handle ValueError exception pass except (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError pass except: # handle all other exceptions pass |
Python’da İstisnaları Artırma
Python programlamasında, çalışma zamanında hatalar meydana geldiğinde istisnalar ortaya çıkar. Anahtar kelimeyi kullanarak istisnaları manuel olarak da yükseltebiliriz raise
.
Bu istisnanın neden ortaya çıktığını açıklamak için isteğe bağlı olarak istisnaya değerler iletebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | >>> raise KeyboardInterrupt Traceback (most recent call last): ... KeyboardInterrupt >>> raise MemoryError("This is an argument") Traceback (most recent call last): ... MemoryError: This is an argument >>> try: ... a = int(input("Enter a positive integer: ")) ... if a <= 0: ... raise ValueError("That is not a positive number!") ... except ValueError as ve: ... print(ve) ... Enter a positive integer: -2 That is not a positive number! |
Python, else yan tümcesi ile deneyin
try
Bazı durumlarda, içindeki kod bloğu hatasız çalışıyorsa, belirli bir kod bloğunu çalıştırmak isteyebilirsiniz . Bu durumlar için, isteğe bağlı else
anahtar kelimeyi try
ifadeyle birlikte kullanabilirsiniz.
Not : else yan tümcesindeki istisnalar, önceki hariç yan tümceleri tarafından ele alınmaz.
Bir örneğe bakalım:
1 2 3 4 5 6 7 8 9 10 | # program to print the reciprocal of even numbers try: num = int(input("Enter a number: ")) assert num % 2 == 0 except: print("Not an even number!") else: reciprocal = 1/num print(reciprocal) |
Çıktı
Tek bir sayı geçersek:
1 2 | <samp>Bir sayı girin: 1 Çift sayı değil!</samp> |
Bir çift sayı geçersek, karşılıklı hesaplanır ve görüntülenir.
1 2 | <samp>Bir sayı girin: 4 0.25</samp> |
Ancak, 0’ı geçersek , ZeroDivisionError
içerideki kod bloğunun önüne geçilmediğinden elde ederiz .else
except
1 2 3 4 5 | <samp>Bir sayı girin: 0 Geri izleme (en son arama son): Dosya "<string>", satır 7, <module> içinde karşılıklı = 1/sayı ZeroDivisionError: sıfıra bölme</samp> |
Python deneyin… sonunda
Python’daki ifadenin try
isteğe bağlı bir finally
yan tümcesi olabilir. Bu madde ne olursa olsun yürütülür ve genellikle dış kaynakları serbest bırakmak için kullanılır.
Örneğin, ağ üzerinden uzak bir veri merkezine bağlanabilir veya bir dosya veya bir Grafik Kullanıcı Arayüzü (GUI) ile çalışabiliriz.
Tüm bu durumlarda, program başarılı olsa da olmasa da durmadan önce kaynağı temizlemeliyiz. Bu eylemler (bir dosyayı kapatma, GUI veya ağ bağlantısını kesme) finally
yürütmeyi garanti etmek için yan tümcede gerçekleştirilir.
İşte bunu göstermek için dosya işlemlerine bir örnek .
1 2 3 4 5 | try: f = open("test.txt",encoding = 'utf-8') # perform file operations finally: f.close() |
Bu tür bir yapı, programın yürütülmesi sırasında bir istisna meydana gelse bile dosyanın kapalı olmasını sağlar.