Foutafhandeling in Python

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 ofwel ValueError ofwel ZeroDivisionError 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 het try-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 als ZeroDivisionError 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 of TypeError 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 het try-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.

YouTube Video