Python Exception Handling Folosind instrucțiunea try, except și final

În acest tutorial, veți învăța cum să gestionați excepțiile din programul Python folosind instrucțiunile try, except și în cele din urmă cu ajutorul exemplelor.

Video: Python Exception Handling (încercați … cu excepția … în cele din urmă)

Excepții în Python

Python are multe excepții încorporate care sunt ridicate atunci când programul dvs. întâmpină o eroare (ceva din program nu merge bine).

Când apar aceste excepții, interpretul Python oprește procesul curent și îl transmite procesului de apelare până când este tratat. Dacă nu este tratat, programul se va prăbuși.

De exemplu, să luăm în considerare un program în care avem o funcție Acare apelează funcția B, care la rândul său apelează funcția C. Dacă apare o excepție în funcție, Cdar nu este tratată C, excepția trece la Bși apoi la A.

Dacă nu este tratat niciodată, se afișează un mesaj de eroare și programul nostru se oprește brusc neașteptat.

Prinderea excepțiilor în Python

În Python, excepțiile pot fi gestionate folosind o tryinstrucțiune.

Operația critică care poate ridica o excepție este plasată în tryclauză. Codul care gestionează excepțiile este scris în exceptclauză.

Putem alege astfel ce operațiuni să efectuăm odată ce am prins excepția. Iată un exemplu simplu.

 # 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)

Ieșire

Intrarea este un Hopa! a avut loc. Următoarea intrare. Intrarea este 0 Hopa! s-a produs. Următoarea intrare. Intrarea este 2 Reciprocul de 2 este 0,5

În acest program, vom parcurge valorile listei randomList. După cum sa menționat anterior, porțiunea care poate provoca o excepție este plasată în interiorul tryblocului.

Dacă nu apare nicio excepție, exceptblocul este omis și fluxul normal continuă (pentru ultima valoare). Dar dacă apare o excepție, aceasta este prinsă de exceptbloc (prima și a doua valoare).

Aici, imprimăm numele excepției folosind exc_info()funcția din interiorul sysmodulului. Putem vedea că acauzele ValueErrorși 0cauzele ZeroDivisionError.

Deoarece fiecare excepție din Python moștenește din Exceptionclasa de bază , putem efectua și sarcina de mai sus în felul următor:

 # 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)

Acest program are aceeași ieșire ca programul de mai sus.

Prinderea excepțiilor specifice în Python

În exemplul de mai sus, nu am menționat nicio excepție specifică în exceptclauză.

Aceasta nu este o practică bună de programare, deoarece va prinde toate excepțiile și va gestiona fiecare caz în același mod. Putem specifica ce excepții exceptar trebui să includă o clauză.

O tryclauză poate avea orice număr de exceptclauze pentru a gestiona diferite excepții, cu toate acestea, doar una va fi executată în cazul în care apare o excepție.

Putem folosi un tuplu de valori pentru a specifica mai multe excepții într-o clauză exceptată. Iată un exemplu de pseudo-cod.

 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

Creșterea excepțiilor în Python

În programarea Python, excepțiile sunt ridicate atunci când apar erori în timpul rulării. De asemenea, putem ridica manual excepții folosind raisecuvântul cheie.

Opțional, putem transmite valori excepției pentru a clarifica de ce a fost ridicată acea excepție.

 >>> 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 încearcă cu clauza else

În unele situații, este posibil să doriți să rulați un anumit bloc de cod dacă blocul de cod din interior a tryrulat fără erori. Pentru aceste cazuri, puteți utiliza elsecuvântul cheie opțional cu trydeclarația.

Notă : excepțiile din clauza else nu sunt tratate de cele precedente cu excepția clauzelor.

Să vedem un exemplu:

 # 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)

Ieșire

Dacă trecem un număr impar:

 Introduceți un număr: 1 Nu este un număr par!

Dacă trecem un număr par, reciprocul este calculat și afișat.

 Introduceți un număr: 4 0,25

Cu toate acestea, dacă trecem 0, obținem ZeroDivisionErrordeoarece blocul de cod din interior elsenu este gestionat de precedent 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()

Acest tip de construcție asigură faptul că fișierul este închis chiar dacă apare o excepție în timpul execuției programului.

Articole interesante...