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 entenValueError
ellerZeroDivisionError
.
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 itry
-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
ogZeroDivisionError
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
ellerTypeError
ø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 itry
-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.