Hvordan fange flere unntak i Python: En enkel guide

Å fange opp unntak i Python bidrar til å sikre at programmene dine krasjer sjeldnere. Dette gjør koden din mer pålitelig og gir en bedre brukeropplevelse. I denne artikkelen vil jeg diskutere hvordan du fanger opp flere unntak i samme forsøk/unntatt blokk i Python.

Hva er unntak i Python?

I Python, Unntak er en kommunikasjonsmekanisme mellom ulike programdeler. Denne kommunikasjonsmekanismen lar en del av systemet kommunisere at den har støtt på en kritisk feil som den ikke vet hvordan den skal håndtere.

Så det reiser et unntak. En annen del av programmet som vet hvordan man håndterer feilen vil fange opp unntaket og håndtere feilen riktig.

Når de ikke håndteres, vil unntak krasje programmet. Å håndtere unntak forhindrer derfor programmet fra å krasjer og gjør det mer pålitelig.

For denne artikkelen vil jeg anta at du allerede er kjent med det grunnleggende om å heve og håndtere unntak, som er dekket i denne introduksjonen til Python Try/Except-artikkelen.

Viktigheten av å håndtere flere unntak i Python

  • Det reduserer kodeduplisering ettersom flere unntak håndteres av samme blokk. Dette gjør koden lettere å lese, redigere og slette.
  • Det hjelper deg også med å skrive mer effektiv kode da feiltypen bare må kontrolleres én gang i stedet for flere ganger.
  31 beste verktøy for nettskraping

Håndtering av flere unntak

Å fange flere unntak refererer til situasjonen der flere unntak fanges opp ved å bruke samme unntatt blokk. I Python kan du fange forskjellige unntak i individuelle unntatt blokker.

Alternativt, når du ønsker å håndtere unntakene på en lignende måte, kan du håndtere dem ved hjelp av én blokk. For å gjøre det, må du fange opp flere unntak. I denne delen vil jeg forklare hvordan du gjør det med et eksempel.

#1. Fange forskjellige unntak i forskjellige blokker

Anta at vi hadde et program laget for å ta inn to forskjellige verdier og dele dem. I dette programmet regner vi med at forskjellige typer unntak vil oppstå når brukeren angir ugyldige verdier. Spesielt ønsker vi å håndtere ValueError og ZeroDivisionError.

ValueError vil økes når brukeren legger inn en verdi som ikke kan konverteres til et heltall. ZeroDivisionError vil økes når det andre tallet er en null. I begge disse tilfellene ønsker vi å vise en feilmelding som sier «Du har angitt en ugyldig verdi».

For å gjøre det ovenfor, kan vi skrive følgende kode:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except ValueError as e:
    print("You entered an invalid value")
except ZeroDivisionError as e:
    print("You entered an invalid value")
except Exception as e:
    print("Something went wrong")

Hvis vi kjører koden og teksten ovenfor som ikke kan konverteres til et heltall, vil dette være resultatet:

  Slik installerer du Nextcloud på en OpenMediaVault NAS på Raspberry Pi

Og hvis vi skrev inn det andre tallet som en 0, ville dette være resultatet:

Koden fungerer som forventet, men legg merke til at vi håndterer ValueError og ZeroDivisionError på samme måte. Så det er mye kodeduplisering mellom de to Unntatt-blokkene. Dette er ikke ideelt, da vi bryter DRY-prinsippet i programmering. DRY-prinsippet sier ikke gjenta deg selv.

Så i stedet for å skrive koden separat, kan vi kombinere de to blokkene til en blokk som fanger opp flere unntak. Hvis vi gjør det, unngår vi gjentakelsen.

#2. Å fange flere unntak i en unntatt blokk

For å fange opp flere unntak gir vi en tuppel som spesifiserer alle feilene vi ønsker å fange. Her er et eksempel der vi fanger både ValueError og ZeroDivisionError i én unntatt blokk:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except (ValueError, ZeroDivisionError) as e:
    print("You entered an invalid value")
except Exception as e:
    print("Something went wrong")

Dette er en mye bedre implementering enn koden før. I hovedsak er dette hva håndtering av flere unntak handler om. Koden ovenfor fungerer på samme måte som før. Hvis du tester med de tidligere eksemplene, bør det fungere som før:

#3. Identifisere hvilket unntak som har blitt fanget

Koden ovenfor utfører den første unntatt-blokken når enten en ValueError eller en ZeroDivisionError har blitt fanget. I noen tilfeller kan du ha kode du vil kjøre for begge feilene og en annen kode du vil kjøre for den ene, men ikke den andre feilen.

  Hvordan selge ting på Amazon

I dette tilfellet må du først identifisere hvilken feil som har blitt fanget og utføre den riktige koden.

For å identifisere hvilket unntak som har blitt fanget, kan du bruke en if/else-blokk inne i unntaksblokken. For eksempel:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except (ValueError, ZeroDivisionError) as e:
    print("You entered an invalid value")

    if isinstance(e, ValueError):
        print('Value Error')
    else:
        print('Zero Division Error')
except Exception as e:
    print("Something went wrong")

I denne blokken, i tillegg til å skrive ut den generiske feilmeldingen for både ValueError og ZeroDivisionError, sjekker vi også nøyaktig hvilken type feil vi fanget og skriver ut en tilleggsmelding. Hvis vi tester koden på nytt, bør vi se noen tilleggsmeldinger som er spesifikke for unntaket.

Når ønsker du å håndtere flere unntak?

I det generelle tilfellet er håndtering av flere unntak ideelt når du ønsker å kjøre den samme koden for lignende unntak som kan oppstå. Dette inkluderer følgende:

  • Nettverksforespørsler som mislyktes av forskjellige årsaker. Uansett kan det være lurt å varsle brukeren om at serveren ikke kunne nås.
  • Mislykkede databasetilkoblinger, som gir flere feil. Selv om disse feilene kan være forskjellige, kan håndteringen din være den samme.
  • Fil I/O produserer også feil som kan håndteres på samme måte, for eksempel tillatelse og full diskfeil.

Konklusjon

Denne artikkelen diskuterte å kombinere flere unntatt blokker til én ved å fange opp flere unntak samtidig. Dette hjelper koden din til å bli mer lesbar og vedlikeholdbar. Deretter vil du kanskje lese denne artikkelen om Python Beginner Projects du bør prøve.