Fejlhåndtering i Python
I denne artikel vil vi forklare fejlhåndtering i Python.
YouTube Video
Fejlhåndtering i Python
Fejlhåndtering i Python udføres primært ved hjælp af nøgleordene try
, except
, else
og finally
. Ved at bruge disse konstruktioner kan du reagere passende, når en fejl opstår i dit program. Nedenfor forklarer vi, hvordan du bruger hver af dem.
try
-blok
Inden i try
-blokken skriver du den kode, du vil udføre. Hvis der opstår en fejl i denne blok, overgår programkørslen straks 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 kode er et eksempel på at opdage fejl i et
try
-blok og håndtere dem korrekt ved at opfange entenValueError
ellerZeroDivisionError
.
except
-blok
I except
-blokken skriver du den kode, der skal udføres, når en specifik undtagelse (fejl) opstår. Du kan også fange specifikke undtagelser afhængigt af hvilken type undtagelse der opstå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 kode er et eksempel på at udføre forskellig håndtering for hver type undtagelse i
except
-blokken, når der opstår en fejl itry
-blokken.
Håndtering af flere undtagelser sammen
Angiv en tuple, når flere undtagelsesklasser kan dele den samme håndteringslogik.
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 kode er et eksempel på at opfange både
IndexError
ogZeroDivisionError
sammen og håndtere undtagelserne på samme måde.
Fange undtagelser uden betingelser
Udelad argumentet for except
, hvis du vil håndtere alle typer undtagelser i én blok.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- Det er dog mere hjælpsomt for at finde fejl og fejlsøge at håndtere specifikke undtagelser fremfor betingelsesløst at opfange alle undtagelser. Når det er muligt, vil det gøre din kode mere robust, hvis du eksplicit kun håndterer forventede undtagelser som
ValueError
ellerTypeError
.
else
-blok
else
-blokken udføres kun, hvis der ikke opstår fejl 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 kode er et eksempel på, at
else
-blokken kun udføres, hvis der ikke opstår en fejl itry
-blokken.
finally
-blok
finally
-blokken bruges til at skrive kode, der altid vil blive udført til sidst, uanset om der opstod en fejl i try
-blokken. Det er nyttigt til at frigive ressourcer eller udføre oprydningsopgaver.
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 kode er et eksempel, der demonstrerer, at
finally
-blokken udføres uanset om der opstår en undtagelse eller ej.
raise
-nøgleordet
Det er også muligt at rejse en undtagelse ved hjælp af raise
-nøgleordet, når visse betingelser i eksisterende kode ikke er opfyldt.
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 kode er et eksempel på eksplicit at udløse en undtagelse ved hjælp af
raise
-nøgleordet, når en betingelse ikke er opfyldt.
Konklusion
Ved at håndtere fejl på denne måde kan du forhindre programnedbrud, vise passende beskeder til brugeren og fortsætte med efterfølgende programbehandling.
Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.