Unntakhåndtering i Python

Unntakhåndtering i Python
Når vi kjører en kode som inneholder feil, vises feilen i utdataene ved å stoppe utførelsen av programmet. Noen feil kan ikke gjenkjennes av brukerne og skape en uønsket situasjon for dem. Men hvis feilen kan vises i et forståelig format for brukerne, er det lett for dem å vite årsaken til feilen. I enhver objektorientert programmering, Try-fangst eller Prøv-fangst-finalt Blokk brukes til å håndtere feil og vise dem i et lesbart format som kalles unntakshåndtering. Hvordan unntakshåndtering kan gjøres i Python -skriptet vises i denne opplæringen.

Syntaks:

prøve:
blokkere…
Bortsett fra unntak:
handler ..
ellers:
blokkere…
endelig:
blokkere…

Her, hvis det oppstår noen feil når du utfører uttalelsene fra prøve blokkering da vil et unntak bli generert og kaste feilen til tilsvarende unntatt handler. Flere feil kan genereres i en enkelt prøve blokkerer og så må du skrive flere unntatt håndterere. Uttalelsene fra ellers Blokk vil bli utført hvis ingen feil oppstår i prøve blokkere. Uttalelsene fra endelig Blokk vil bli utført hvis det oppstår noen feil eller ikke oppstår. For unntakshåndtering, bruk ellers og endelig Blokker er ikke viktige. Ulike typer unntakshåndtering i Python er forklart i neste del av opplæringen.

Eksempel-1: Bruk av en enkelt prøve-unntak for å validere numeriske data:

Dette eksemplet viser veldig enkel bruk av unntakshåndtering i Python. I prøve Blokk, to innganger vil bli hentet fra brukeren, den ene er en strengverdi og en annen er en numerisk verdi. Hvis brukeren skriver inn en strengverdi i stedet for numerisk verdi for den andre inngangen da, ValueError unntak vil bli generert av Python3 og en tilpasset feilmelding vises fra unntatt blokkere.

#!/usr/bin/env python3
# Definer prøveblokken
prøve:
# Ta noen data som en streng
Navn = input ("Skriv inn navnet ditt: \ n")
# Ta eventuelle numeriske data
Alder = int (input ("Angi din alder: \ n"))
# Skriv ut de formaterte dataene med navn og alder
trykk ("Hei %s, du er %s år gammel." %(navn Alder))
# Håndter inngangsfeil
Bortsett fra (ValueError):
# Skriv ut tilpasset feilmelding
trykk ("Feil inngang! Du må skrive et tall som din alder.")

Produksjon:

Skriptet utføres to ganger i følgende utgang med feil inngang og riktig inngang. Første gang, når brukertypen 'Trettien' Som aldersverdi for den andre inngangen som tar numerisk verdi, så a ValueError genereres og feilmeldingen vises fra unntatt blokken. Andre gang genereres ingen feil for riktige inngangsverdier.

Eksempel-2: Bruk av flere unntatt blokkering for å håndtere flere feil:

Hvordan du kan bruke flere unntatt blokkering for å håndtere flere feil vises i dette eksemplet. To typer feil vil bli håndtert i dette skriptet. Et filnavn tas som innspill fra brukeren for lesing. Hvis filen ikke eksisterer, vil den generere en ioerror unntak og hvis filen eksisterer, men tom, vil den heve et tilpasset unntak. For dette brukes to unntatt blokker i dette skriptet. Når ingen av feilene oppstår, vises innholdet i filen.

#!/usr/bin/env python3
# Importer OS -modul
Importer OS
# Definer prøveblokken
prøve:
# Ta filnavnet som inngang
filnavn = input ('Skriv inn et filnavn \ n')
# Åpne filen for lesing
file_handler = åpen (filnavn)
# Angi søken Ponter fra 0 til slutten av filen
file_handler.Søk (0, OS.Seek_end)
# Les størrelsen på filen i byte
størrelse = file_handler.fortelle()
# Skriv ut filinnholdet og antall tegn på filen
if (størrelse> 0):
# Sett ponteret til starten av filen
file_handler.Søk (0)
# Les og lagre innholdet i filen i en variabel
file_content = file_handler.lese()
skrive ut ("\ n innholdet i filen gitt nedenfor \ n")
print (file_content)
print ("størrelsen på filen er %d byte" %størrelse)
ellers:
# Heve unntaket hvis filen er tom
Hev unntak ('Filen har ikke noe innhold.')
# Skriv ut feilmeldingen hvis filen ikke eksisterer
Bortsett fra IOERROR som feil:
trykk (feil)
# Skriv ut feilmeldingen hvis filen er tom
unntatt unntak som e:
Print ('Feil: %S' %E)
# Skriv ut meldingen hvis det ikke er noen feil
ellers:
utskrift ('ingen feil oppstår')

Produksjon:

Skriptet utføres i tre ganger. Første gang blir det gitt et filnavn som ikke eksisterer, og utdataene viser en IOERROR -melding. Andre gang er det gitt et filnavn som eksisterer, men som ikke har noe innhold, og utdataene viser en tilpasset melding. Tredje gang er det gitt et filnavn som eksisterer og inneholder tekst. Utgangen viser innholdet i filen.

Eksempel-3: Bruk av prøve-unntaksfinalt blokkering for å håndtere divisjonsfeil

Eksemplet viser bruken av en prøve-unntaksfinalt blokkering for å håndtere divisjonsfeil. To numeriske verdier vil bli tatt som input og dele den første inngangen med andre inngang i prøveblokken. To typer feil kan oppstå her. En er ValueError Når brukeren vil skrive inn en hvilken som helst verdi uten nummer og en annen er ZerodisionError Når brukeren vil ta 0 Som en annen inngang.

#!/usr/bin/env python3
# Definer prøveblokken
prøve:
# Angi to floatnumre
n1 = float (input ('skriv inn et tall \ n'))
n2 = float (input ('skriv inn et tall \ n'))
# Del disse tallene
divisjon = n1 / n2
# Håndter feil
Bortsett fra (ZerodivisionError, ValueError):
Print ("Delt med null feil eller verdien er ikke et tall")
# Utskriftsmelding hvis ingen feil oppstår
ellers:
Print ("Resultatet av divisjonen er %F" %Divisjon)
# Utskriftsmelding hvis en feil oppstår eller ikke oppstår
endelig:
Print ("The End")

Produksjon:

Her kjøres skriptet i to ganger med begge riktige innganger og med den andre inngangen som 0. Så det andre gang unntaket genereres og viser feilmeldingen.

Konklusjon:

Denne opplæringen viser den grunnleggende unntakshåndteringsprosessen i Python3 for de nye Python -brukerne. Leserne vil kunne forstå hva som er unntakshåndtering og hvordan de skal søke i Python -skriptet etter å ha praktisert eksemplene ovenfor.