Håndtering av Python-unntak Bruk av prøve, unntatt og til slutt uttalelse

I denne opplæringen lærer du hvordan du håndterer unntak i Python-programmet ditt ved å prøve, unntatt og til slutt uttalelser ved hjelp av eksempler.

Video: Python Exception Handling (prøv … bortsett fra … endelig)

Unntak i Python

Python har mange innebygde unntak som heves når programmet støter på en feil (noe i programmet går galt).

Når disse unntakene oppstår, stopper Python-tolk den nåværende prosessen og overfører den til anropsprosessen til den blir håndtert. Hvis det ikke håndteres, vil programmet krasje.

La oss for eksempel se på et program der vi har en funksjon Asom kaller funksjon B, som igjen kaller funksjon C. Hvis et unntak oppstår i funksjon, Cmen ikke håndteres i det C, overføres unntaket til Bog deretter til A.

Hvis det aldri blir håndtert, vises en feilmelding, og programmet stopper plutselig uventet.

Fanger unntak i Python

I Python kan unntak håndteres ved hjelp av en tryuttalelse.

Den kritiske operasjonen som kan gi unntak er plassert inne i tryparagrafen. Koden som håndterer unntakene er skrevet i exceptparagrafen.

Vi kan dermed velge hvilke operasjoner vi skal utføre når vi har fått unntaket. Her er et enkelt eksempel.

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

Produksjon

Oppføringen er en Ups! skjedde. Neste oppføring. Oppføringen er 0 Ups! oppstod. Neste oppføring. Oppføringen er 2 Den gjensidige av 2 er 0,5

I dette programmet går vi gjennom verdiene i listen randomly. Som tidligere nevnt, plasseres den delen som kan forårsake unntak inne i tryblokken.

Hvis det ikke forekommer noe unntak, excepthoppes blokken over og normal flyt fortsetter (for siste verdi). Men hvis det oppstår unntak, blir det fanget av exceptblokken (første og andre verdier).

Her skriver vi ut navnet på unntaket ved hjelp av exc_info()funksjonen i sysmodulen. Vi kan se at aårsaker ValueErrorog 0årsaker ZeroDivisionError.

Siden hvert unntak i Python arver fra baseklassen Exception, kan vi også utføre oppgaven ovenfor på følgende måte:

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

Dette programmet har samme utgang som programmet ovenfor.

Fange spesifikke unntak i Python

I eksemplet ovenfor nevnte vi ikke noe spesifikt unntak i exceptparagrafen.

Dette er ikke god programmeringspraksis, da det vil fange alle unntak og håndtere alle tilfeller på samme måte. Vi kan spesifisere hvilke unntak en exceptklausul skal fange.

En tryklausul kan ha et hvilket som helst antall exceptklausuler for å håndtere forskjellige unntak, men bare en vil bli utført i tilfelle et unntak oppstår.

Vi kan bruke en mengde verdier for å spesifisere flere unntak i en unntatt ledd. Her er et eksempel på en pseudokode.

 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

Å heve unntak i Python

I Python-programmering heves unntak når feil oppstår ved kjøretid. Vi kan også manuelt heve unntak ved å bruke raisenøkkelordet.

Vi kan eventuelt overføre verdier til unntaket for å avklare hvorfor unntaket ble reist.

 >>> 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 prøv med annet ledd

I noen situasjoner vil du kanskje kjøre en bestemt blokk med kode hvis kodeblokken trykjørte uten feil. I disse tilfellene kan du bruke det valgfrie elsenøkkelordet sammen med tryutsagnet.

Merk : Unntak i den andre klausulen håndteres ikke av de foregående unntatt klausulene.

La oss se på et eksempel:

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

Produksjon

Hvis vi passerer et oddetall:

 Skriv inn et tall: 1 Ikke et partall!

Hvis vi passerer et partall, blir gjensidige beregnet og vist.

 Skriv inn et tall: 4 0,25

Imidlertid, hvis vi passerer 0, får vi ZeroDivisionErrorettersom kodeblokken inne elseikke blir håndtert av foregående 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()

Denne typen konstruksjon sørger for at filen lukkes selv om det oppstår et unntak under programutførelsen.

Interessante artikler...