Python-uitzonderingsbehandeling

  1. try...except
  2. raise Uitzondering
  3. try...finally
  4. Python ingebouwde uitzonderingen

In deze sectie leert u hoe u met Python-uitzonderingen moet omgaan. Verder zul je leren uitzonderingen te maken en te vangen.

Dubbel glas
Dubbel glas

Wanneer een uitzondering optreedt in een programma, wordt de uitvoering van het programma beëindigd. Maar meestal geeft u de voorkeur niet aan de abnormale beëindiging van het programma, daarom kan je Python-uitzonderingen gebruiken om te voorkomen dat uw programma crasht.

try...except

In het volgende voorbeeld wordt de gebruiker gevraagd om 10 gehele getallen in te voeren. Als de gebruiker een ander type invoert in plaats van gehele getallen, wordt een uitzondering gegenereerd en worden instructies in except blok uitgevoerd:

>>> n = 10
>>> i = 1
>>> sum = 0
>>> while i <= n:
    try:
        num = int(input('Enter a number: '))
        sum = sum + num
        i = i+1
    except:
        print('Please enter an integer!!')
        break

    
Enter a number: 23
Enter a number: 12
Enter a number: Asd
Please enter an integer!!
>>> print('Sum of numbers =', sum)
Sum of numbers = 35

Je kan ook gespecificeerde uitzonderingen vangen, bijvoorbeeld, als delen door nul gebeurt, kan je de overeenkomstige uitzondering vangen als:

try:
    #statements
except ZeroDivisionError:
    #exception handling
except:
    #all other exceptions are handled here

raise Uitzondering

Je kan een specifieke uitzondering afdwingen door een raise trefwoord te gebruiken:

>>> raise ZeroDivisionError
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    raise ZeroDivisionError
ZeroDivisionError

>>> raise ValueError
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    raise ValueError
ValueError

Als u aangepaste informatie moet toevoegen aan de zelf-opgeworpen uitzondering, kan je deze tussen haakjes na het fouttype uitzondering toevoegen.

>>> raise NameError("This is a customized exception")
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    raise NameError("This is a customized exception")
NameError: This is a customized exception

try...finally

Het finally blok is optioneel in het try blok. Als er een finally blokkering is, wordt deze in elk geval uitgevoerd.

Dit wordt aangetoond in het onderstaande voorbeeld:

>>> try:
        raise ValueError
finally:
        print('You are in finally block')

    
You are in finally block
Traceback (most recent call last):
  File "<pyshell#23>", line 2, in <module>
    raise ValueError
ValueError

Het try...finally blok wordt gebruikt voor het opruimen, zoals bij het werken met een bestand. Het is een goede gewoonte om het bestand te sluiten. Het bestand wordt dus in het finally blok gesloten.

Python ingebouwde uitzonderingen

In dit gedeelte leert u over de standaarduitzonderingen in Python-programmering.

Uitzonderingen zijn de runtime-fouten die tijdens de interpretatie worden gemaakt. Als u bijvoorbeeld een getal door nul deelt, wordt een runtime-fout genoemd ZeroDivisionError.

In Python zijn er enkele ingebouwde uitzonderingen die hieronder worden beschreven:

Uitzondering Wanneer het wordt verhoogd?
AssertionError wanneer de assert instructie is mislukt
AttributeError wanneer de attribute referentie is mislukt
EOFError wanneer er geen gegevens worden gelezen door de input() functies en het einde van het bestand is bereikt.
FloatingPointError wanneer de berekening van het zwevende punt is mislukt
GeneratorExit Wanneer een coroutine of een generator wordt gesloten, GeneratorExit treedt een uitzondering op
ImportError wanneer import kan de module niet vinden
ModuleNotFoundError wanneer de module niet is gevonden door import . Deze uitzondering is een subklasse van ImportError .
IndexError wanneer de index van een reeks niet binnen bereik is.
KeyError wanneer een woordenboeksleutel niet in het woordenboek wordt gevonden
KeyboardInterrupt wanneer een interrupt-toets wordt ingedrukt.
MemoryError wanneer er minder geheugen beschikbaar is voor een opgegeven bewerking
NameError wanneer een variabele niet wordt gevonden
NotImplementedError wanneer de implementatie van de abstracte methode nodig is, maar niet wordt verstrekt.
OSError wanneer een systeemfout wordt aangetroffen
OverFlowError wanneer een waarde te groot is om te worden weergegeven.
RecursionError wanneer de recursielimiet het maximale aantal overschrijdt
IndentationError wanneer inspringen correct is opgegeven voor de definitie van een functie, klasse, enz.
SystemError wanneer een systeemgerelateerde fout wordt gevonden
SystemExit wanneer sys.exit() wordt gebruikt om de tolk te verlaten.
TypeError wanneer een bewerking ongeldig is voor het opgegeven gegevenstype
ValueError wanneer een ingebouwde functie geldige argumenten heeft maar de opgegeven waarden niet geldig zijn.
RunTimeError wanneer de gegenereerde fout in geen enkele andere categorie valt
IOError wanneer een I/O-bewerking is mislukt.
UnBoundLocalError wanneer de lokale variabele wordt gebruikt maar geen waarde heeft
SyntaxError wanneer er een syntaxisfout is
TabError wanneer er onnodige tabinspringing is
UnicodeError wanneer een Unicode-gerelateerde fout wordt aangetroffen
UnicodeEncodeError wanneer een Unicode-gerelateerde fout wordt aangetroffen vanwege codering
UnicodeDecodeError wanneer een Unicode-gerelateerde fout wordt aangetroffen vanwege decodering
UnicodeTranslateError wanneer een Unicode-gerelateerde fout wordt aangetroffen vanwege vertalen
ZeroDivisionError wanneer een getal wordt gedeeld door nul