Foutafhandeling in Python
In dit artikel leggen we foutafhandeling in Python uit.
YouTube Video
Foutafhandeling in Python
Foutafhandeling in Python wordt voornamelijk gedaan met de sleutelwoorden try
, except
, else
en finally
. Door deze constructies te gebruiken, kun je op de juiste manier reageren wanneer er een fout in je programma optreedt. Hieronder leggen we uit hoe je elk van hen kunt gebruiken.
try
-blok
Binnen het try
-blok schrijf je de code die je wilt uitvoeren. Als er een fout optreedt binnen dit blok, schakelt de uitvoering van het programma direct over naar het except
-blok.
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}")
- Deze code is een voorbeeld van het detecteren van fouten in een
try
-blok en het correct afhandelen ervan door ofwelValueError
ofwelZeroDivisionError
te vangen.
except
-blok
In het except
-blok schrijf je de code die zal worden uitgevoerd wanneer een specifieke uitzondering (fout) optreedt. Je kunt ook specifieke uitzonderingen afvangen afhankelijk van het type uitzondering dat optreedt.
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}")
- Deze code is een voorbeeld van het uitvoeren van verschillende afhandelingen voor elk type uitzondering in het
except
-blok wanneer er een fout optreedt in hettry
-blok.
Meerdere uitzonderingen samen afhandelen
Specificeer een tuple wanneer meerdere uitzonderingklassen dezelfde verwerkingslogica kunnen delen.
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")
- Deze code is een voorbeeld van het samen vangen van zowel
IndexError
alsZeroDivisionError
en het op dezelfde manier afhandelen van deze uitzonderingen.
Onvoorwaardelijk uitzonderingen afvangen
Laat het argument voor except
weg als je alle typen uitzonderingen in één blok wilt afhandelen.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- Het afhandelen van specifieke uitzonderingen in plaats van onvoorwaardelijk alle uitzonderingen te vangen, is echter nuttiger bij het opsporen van bugs en het debuggen. Waar mogelijk, het expliciet afhandelen van alleen verwachte uitzonderingen zoals
ValueError
ofTypeError
zal de robuustheid van uw code vergroten.
else
-blok
Het else
-blok wordt alleen uitgevoerd als er geen fouten optreden binnen het try
-blok.
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)
- Deze code is een voorbeeld waarbij het
else
-blok alleen wordt uitgevoerd als er geen fout optreedt in hettry
-blok.
finally
-blok
Het finally
-blok wordt gebruikt om code te schrijven die altijd aan het einde wordt uitgevoerd, ongeacht of er een fout is opgetreden in het try
-blok. Het is nuttig voor het vrijgeven van middelen of het uitvoeren van schoonmaaktaken.
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.")
- Deze code is een voorbeeld dat aantoont dat het
finally
-blok wordt uitgevoerd ongeacht of er een uitzondering optreedt of niet.
Het sleutelwoord raise
Het is ook mogelijk om een uitzondering te genereren met behulp van het sleutelwoord raise
wanneer aan bepaalde voorwaarden in de bestaande code niet wordt voldaan.
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}")
- Deze code is een voorbeeld van het expliciet opwerpen van een uitzondering met het sleutelwoord
raise
wanneer niet aan een voorwaarde is voldaan.
Conclusie
Door fouten op deze manier af te handelen, kun je programmastoringen voorkomen, passende berichten aan de gebruiker tonen en doorgaan met daaropvolgende programmaverwerking.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.