Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Afhandeling van Python-uitzonderingen met behulp van de instructie try, behalve en tenslotte

Afhandeling van Python-uitzonderingen met behulp van de instructie try, behalve en ten slotte

In deze tutorial leer je met behulp van voorbeelden om te gaan met uitzonderingen in je Python-programma met behulp van try, behalve en tenslotte statements.

Video:Afhandeling van Python-uitzonderingen (probeer..behalve..eindelijk)

Uitzonderingen in Python

Python heeft veel ingebouwde uitzonderingen die worden gegenereerd wanneer je programma een fout tegenkomt (er gaat iets mis in het programma).

Wanneer deze uitzonderingen optreden, stopt de Python-interpreter het huidige proces en geeft het door aan het aanroepende proces totdat het wordt afgehandeld. Als het niet wordt afgehandeld, zal het programma crashen.

Laten we bijvoorbeeld een programma beschouwen waarin we een functie hebben A die functie B . aanroept , die op zijn beurt functie C . aanroept . Als er een uitzondering optreedt in functie C maar wordt niet afgehandeld in C , de uitzondering gaat naar B en dan naar A .

Als het niet wordt afgehandeld, wordt een foutmelding weergegeven en komt ons programma plotseling onverwacht tot stilstand.


Uitzonderingen opvangen in Python

In Python kunnen uitzonderingen worden afgehandeld met een try verklaring.

De kritieke bewerking die een uitzondering kan veroorzaken, wordt in de try . geplaatst clausule. De code die de uitzonderingen afhandelt, is geschreven in de except clausule.

We kunnen dus kiezen welke bewerkingen we moeten uitvoeren zodra we de uitzondering hebben opgevangen. Hier is een eenvoudig voorbeeld.

# import module sys to get the type of exception
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("The entry is", entry)
        r = 1/int(entry)
        break
    except:
        print("Oops!", sys.exc_info()[0], "occurred.")
        print("Next entry.")
        print()
print("The reciprocal of", entry, "is", r)

Uitvoer

The entry is a
Oops! <class 'ValueError'> occurred.
Next entry.

The entry is 0
Oops! <class 'ZeroDivisionError'> occured.
Next entry.

The entry is 2
The reciprocal of 2 is 0.5

In dit programma doorlopen we de waarden van de randomList lijst. Zoals eerder vermeld, wordt het gedeelte dat een uitzondering kan veroorzaken in de try . geplaatst blok.

Als er geen uitzondering optreedt, wordt de except blok wordt overgeslagen en de normale stroom gaat door (voor de laatste waarde). Maar als er een uitzondering optreedt, wordt deze opgevangen door de except blok (eerste en tweede waarde).

Hier drukken we de naam van de uitzondering af met de exc_info() functie binnen sys module. We kunnen zien dat a veroorzaakt ValueError en 0 veroorzaakt ZeroDivisionError .

Aangezien elke uitzondering in Python erft van de basis Exception klasse, kunnen we de bovenstaande taak ook op de volgende manier uitvoeren:

# import module sys to get the type of exception
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("The entry is", entry)
        r = 1/int(entry)
        break
    except Exception as e:
        print("Oops!", e.__class__, "occurred.")
        print("Next entry.")
        print()
print("The reciprocal of", entry, "is", r)

Dit programma heeft dezelfde output als het bovenstaande programma.


Specifieke uitzonderingen opvangen in Python

In het bovenstaande voorbeeld hebben we geen specifieke uitzondering genoemd in de except clausule.

Dit is geen goede programmeerpraktijk omdat het alle uitzonderingen opvangt en elk geval op dezelfde manier behandelt. We kunnen specificeren welke uitzonderingen een except clausule zou moeten vangen.

Een try clausule kan een willekeurig aantal except . hebben clausules om verschillende uitzonderingen af ​​te handelen, maar er wordt er maar één uitgevoerd als er een uitzondering optreedt.

We kunnen een tupel met waarden gebruiken om meerdere uitzonderingen in een uitzonderingsclausule op te geven. Hier is een voorbeeld van een pseudo-code.

try:
   # do something
   pass

except ValueError:
   # handle ValueError exception
   pass

except (TypeError, ZeroDivisionError):
   # handle multiple exceptions
   # TypeError and ZeroDivisionError
   pass

except:
   # handle all other exceptions
   pass

Uitzonderingen verhogen in Python

In Python-programmering worden uitzonderingen gemaakt wanneer fouten optreden tijdens runtime. We kunnen uitzonderingen ook handmatig verhogen met de raise zoekwoord.

We kunnen optioneel waarden doorgeven aan de uitzondering om te verduidelijken waarom die uitzondering is gemaakt.

>>> raise KeyboardInterrupt
Traceback (most recent call last):
...
KeyboardInterrupt

>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument

>>> try:
...     a = int(input("Enter a positive integer: "))
...     if a <= 0:
...         raise ValueError("That is not a positive number!")
... except ValueError as ve:
...     print(ve)
...    
Enter a positive integer: -2
That is not a positive number!

Python proberen met else-clausule

In sommige situaties wil je misschien een bepaald codeblok uitvoeren als het codeblok in try liep zonder fouten. Voor deze gevallen kunt u de optionele else . gebruiken trefwoord met de try verklaring.

Opmerking :Uitzonderingen in de else-clausule worden niet behandeld door de voorgaande behalve-clausules.

Laten we een voorbeeld bekijken:

# program to print the reciprocal of even numbers

try:
    num = int(input("Enter a number: "))
    assert num % 2 == 0
except:
    print("Not an even number!")
else:
    reciprocal = 1/num
    print(reciprocal)

Uitvoer

Als we een oneven getal doorgeven:

Enter a number: 1
Not an even number!

Als we een even getal doorgeven, wordt het omgekeerde berekend en weergegeven.

Enter a number: 4
0.25

Als we echter 0 passeren, krijgen we ZeroDivisionError als het codeblok in else wordt niet afgehandeld door voorafgaande except .

Enter a number: 0
Traceback (most recent call last):
  File "<string>", line 7, in <module>
    reciprocal = 1/num
ZeroDivisionError: division by zero

Python proberen... eindelijk

De try statement in Python kan een optionele finally . hebben clausule. Deze clausule wordt hoe dan ook uitgevoerd en wordt over het algemeen gebruikt om externe bronnen vrij te geven.

We kunnen bijvoorbeeld via het netwerk verbonden zijn met een extern datacenter of werken met een bestand of een grafische gebruikersinterface (GUI).

In al deze omstandigheden moeten we de bron opschonen voordat het programma stopt, of het nu succesvol is uitgevoerd of niet. Deze acties (een bestand sluiten, GUI of loskoppelen van het netwerk) worden uitgevoerd in de finally clausule om de uitvoering te garanderen.

Hier is een voorbeeld van bestandsbewerkingen om dit te illustreren.

try:
   f = open("test.txt",encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

Dit type constructie zorgt ervoor dat het bestand wordt gesloten, zelfs als er een uitzondering optreedt tijdens de uitvoering van het programma.


Python

  1. Python-sleutelwoorden en -ID's
  2. Python-verklaring, inspringing en opmerkingen
  3. Python-variabelen, constanten en literalen
  4. Python Type Conversie en Type Casting
  5. Python invoer, uitvoer en import
  6. Python pass-instructie
  7. Python globale, lokale en niet-lokale variabelen
  8. Python-directory en bestandsbeheer
  9. Afhandeling van Python-uitzonderingen met behulp van de instructie try, behalve en tenslotte
  10. Python- en Raspberry Pi-temperatuursensor
  11. C++ Exception Handling:Try, Catch, Throw Voorbeeld