Bu eğitimde, örneklerin yardımıyla Python programınızda try, hariç ve nihayet ifadeleri kullanarak istisnaları nasıl ele alacağınızı öğreneceksiniz.
Video: Python Özel Durum İşleme (deneyin… hariç… sonunda)
Python'daki istisnalar
Python, programınız bir hatayla karşılaştığında ortaya çıkan birçok yerleşik istisnaya sahiptir (programdaki bir şeyler ters gitti).
Bu istisnalar ortaya çıktığında, Python yorumlayıcısı mevcut işlemi durdurur ve işlenene kadar çağıran işleme aktarır. İşlenmezse, program çökecektir.
Örneğin, fonksiyonu A
çağıran B
ve daha sonra fonksiyonu çağıran bir fonksiyona sahip olduğumuz bir program düşünelim C
. İşlevde bir istisna meydana gelirse C
ancak ele alınmazsa C
, istisna B
öğesine ve ardından öğesine geçer A
.
Hiç işlenmezse, bir hata mesajı görüntülenir ve programımız aniden beklenmedik bir şekilde durur.
Python'da İstisnaları Yakalama
Python'da, istisnalar bir try
ifade kullanılarak ele alınabilir .
Bir istisnayı ortaya çıkarabilecek kritik işlem try
cümlenin içine yerleştirilmiştir . İstisnaları işleyen kod except
cümlecikte yazılmıştır .
Böylece, istisnayı yakaladığımızda hangi işlemleri gerçekleştireceğimizi seçebiliriz. İşte basit bir örnek.
# 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ı
Giriş bir Hata! oluştu. Sonraki giriş. Giriş 0 Oops! oluştu. Sonraki giriş. Giriş 2'dir 2'nin tersi 0,5'tir
Bu programda, randomList listesinin değerleri arasında döngü yapıyoruz. Daha önce de belirtildiği gibi, 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 meydana gelirse, except
blok tarafından yakalanır (birinci ve ikinci değerler).
Burada, modül exc_info()
içindeki işlevi kullanarak istisnanın adını yazdırıyoruz sys
. Bunun a
nedenlerini ValueError
ve 0
nedenlerini görebiliriz ZeroDivisionError
.
Python'daki her istisna temel Exception
sınıftan miras aldığından , yukarıdaki görevi de şu şekilde gerçekleştirebiliriz:
# 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ı Yakalama
Yukarıdaki örnekte, except
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 except
cümlenin hangi istisnaları yakalaması gerektiğini belirleyebiliriz .
Bir try
cümle, except
farklı istisnaları işlemek için herhangi bir sayıda cümle içerebilir , ancak bir istisna olması durumunda yalnızca bir cümle çalıştırılacaktır.
Hariç tümcede birden çok istisna belirtmek için bir değer demeti kullanabiliriz. İşte örnek bir sözde kod.
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ı Oluşturma
Python programlamasında, çalışma zamanında hatalar oluştuğunda istisnalar ortaya çıkar. raise
Anahtar kelimeyi kullanarak istisnaları manuel olarak da artırabiliriz .
O istisnanın neden ortaya çıktığını açıklığa kavuşturmak için isteğe bağlı olarak değerleri istisnaya aktarabiliriz.
>>> 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 cümlesiyle dene
Bazı durumlarda, içindeki kod bloğu try
herhangi bir hatasız çalışırsa, belirli bir kod bloğu çalıştırmak isteyebilirsiniz . Bu durumlar için, isteğe bağlı else
anahtar sözcüğü deyimle birlikte kullanabilirsiniz try
.
Not : else cümlesindeki istisnalar, önceki istisna cümleleri tarafından ele alınmaz.
Bir örneğe bakalım:
# 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:
Bir sayı girin: 1 Çift sayı değil!
Çift sayı geçersek, karşılıklı hesaplanır ve görüntülenir.
Bir sayı girin: 4 0,25
Bununla birlikte, 0'ı ZeroDivisionError
geçersek else
, içindeki kod bloğu önceki tarafından ele alınmadığı için elde ederiz except
.
Enter a number: 0 Traceback (most recent call last): File "", line 7, in reciprocal = 1/num ZeroDivisionError: division by zero
Python try… finally
The try
statement in Python can have an optional finally
clause. This clause is executed no matter what, and is generally used to release external resources.
For example, we may be connected to a remote data center through the network or working with a file or a Graphical User Interface (GUI).
In all these circumstances, we must clean up the resource before the program comes to a halt whether it successfully ran or not. These actions (closing a file, GUI or disconnecting from network) are performed in the finally
clause to guarantee the execution.
Here is an example of file operations to illustrate this.
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 oluşsa bile dosyanın kapatılmasını sağlar.