Feilhåndtering i Python

Feilhåndtering i Python

I denne artikkelen vil vi forklare feilhåndtering i Python.

YouTube Video

Feilhåndtering i Python

Feilhåndtering i Python utføres hovedsakelig ved bruk av nøkkelordene try, except, else, og finally. Ved å bruke disse konstruksjonene kan du håndtere feil på en passende måte når de oppstår i programmet ditt. Nedenfor vil vi forklare hvordan du bruker hver av dem.

try-blokk

Innenfor try-blokken skriver du koden du ønsker å utføre. Dersom en feil oppstår i denne blokken, vil programutførelsen umiddelbart gå over til except-blokken.

 1try:
 2    # Code that may raise an error (division by zero, for example)
 3    #number = int(input("Enter a number: "))
 4    number = int("abc")
 5    result = 10 / number
 6    print("Result:", result)
 7except ValueError as e:
 8    # Handle invalid input (e.g. non-numeric input)
 9    print("Invalid input. Please enter a whole number.")
10    print(f"Value error: {e}")
11except ZeroDivisionError as e:
12    # Handle division by zero error
13    print("Cannot divide by zero!")
14    print(f"Zero division error: {e}")
  • Denne koden er et eksempel på å oppdage feil i en try-blokk og håndtere dem riktig ved å fange enten ValueError eller ZeroDivisionError.

except-blokk

I except-blokken skriver du koden som skal utføres når en spesifikk unntakstilstand (feil) oppstår. Du kan også fange spesifikke unntak basert på hvilken type unntak som oppstår.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 0
 4    result = 10 / number
 5    print("Result:", result)
 6except ZeroDivisionError as e:
 7    print("Cannot divide by zero!")
 8    print(f"Zero division error: {e}")
 9except ValueError as e:
10    print("Input was not a valid integer.")
11    print(f"Value error: {e}")
  • Denne koden er et eksempel på å utføre forskjellig håndtering for hver type unntak i except-blokken når en feil oppstår i try-blokken.

Håndtere flere unntak sammen

Spesifiser en tuppel når flere unntaksklasser kan dele samme håndteringslogikk.

1try:
2    my_list = [1, 2]
3    result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5    print(f"Exception occurred: {e}")
  • Denne koden er et eksempel på å fange både IndexError og ZeroDivisionError samtidig og håndtere unntakene på samme måte.

Fange unntak betingelsesløst

Utelat argumentet for except hvis du vil håndtere alle typer unntak i én blokk.

1try:
2    # This code might cause some exception
3    result = "10" + 5  # TypeError
4except Exception as e:
5    print("Unexpected error")
  • Å håndtere spesifikke unntak i stedet for ubetinget å fange alle unntak er imidlertid mer nyttig for å finne feil og feilsøke. Når det er mulig, vil eksplisitt håndtering av kun forventede unntak som ValueError eller TypeError øke robustheten til koden din.

else-blokk

else-blokken utføres kun dersom ingen feil oppstår i try-blokken.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 5
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
  • Denne koden er et eksempel der else-blokken bare kjøres hvis det ikke oppstår en feil i try-blokken.

finally-blokk

finally-blokken brukes til å skrive kode som alltid skal utføres til slutt, uavhengig av om en feil oppstod i try-blokken. Den er nyttig for å frigjøre ressurser eller utføre oppryddingsoppgaver.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = int("abc")
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
14finally:
15    # This block will always execute, regardless of whether an exception was raised
16    print("Execution completed.")
  • Denne koden er et eksempel som viser at finally-blokken kjøres uansett om det oppstår et unntak eller ikke.

raise-nøkkelordet

Det er også mulig å utløse et unntak ved å bruke nøkkelordet raise når visse betingelser i eksisterende kode ikke oppfylles.

1def divide(a, b):
2    if b == 0:
3        raise ValueError("Cannot divide by zero.")
4    return a / b
5
6try:
7    result = divide(10, 0)
8except ValueError as e:
9    print(f"Error: {e}")
  • Denne koden er et eksempel på eksplisitt å kaste et unntak ved å bruke raise-nøkkelordet når en betingelse ikke er oppfylt.

Konklusjon

Ved å håndtere feil på denne måten kan du unngå programkrasj, vise passende meldinger til brukeren, og fortsette med programprosessen.

Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.

YouTube Video