Python İstisnası İşleme try, exclu ve finally deyimini kullanma

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 Bve daha sonra fonksiyonu çağıran bir fonksiyona sahip olduğumuz bir program düşünelim C. İşlevde bir istisna meydana gelirse Cancak 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 tryifade kullanılarak ele alınabilir .

Bir istisnayı ortaya çıkarabilecek kritik işlem trycümlenin içine yerleştirilmiştir . İstisnaları işleyen kod exceptcü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 trybloğun içine yerleştirilir .

Herhangi bir istisna oluşmazsa, exceptblok atlanır ve normal akış devam eder (son değer için). Ancak herhangi bir istisna meydana gelirse, exceptblok 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 anedenlerini ValueErrorve 0nedenlerini görebiliriz ZeroDivisionError.

Python'daki her istisna temel Exceptionsı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, exceptmaddede 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 exceptcümlenin hangi istisnaları yakalaması gerektiğini belirleyebiliriz .

Bir trycümle, exceptfarklı 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. raiseAnahtar 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 tryherhangi bir hatasız çalışırsa, belirli bir kod bloğu çalıştırmak isteyebilirsiniz . Bu durumlar için, isteğe bağlı elseanahtar 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'ı ZeroDivisionErrorgeç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.

Ilginç makaleler...