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

Python - Afhandeling van uitzonderingen

Vorige paginaVolgende pagina

Python biedt twee zeer belangrijke functies om eventuele onverwachte fouten in uw Python-programma's af te handelen en om foutopsporingsmogelijkheden toe te voegen −

  • Afhandeling van uitzonderingen − Dit zou in deze zelfstudie worden behandeld. Hier is een lijst met standaarduitzonderingen die beschikbaar zijn in Python:Standaarduitzonderingen.

  • Beweringen − Dit wordt behandeld in de zelfstudie Beweringen in Python.

Lijst met standaarduitzonderingen −

Sr.nr. Naam en beschrijving uitzondering
1

Uitzondering

Basisklasse voor alle uitzonderingen

2

StopIteratie

Verhoogd wanneer de next() methode van een iterator niet naar een object verwijst.

3

Systeemafsluiten

Verhoogd door de sys.exit() functie.

4

Standaardfout

Basisklasse voor alle ingebouwde uitzonderingen behalve StopIteration en SystemExit.

5

Rekenfout

Basisklasse voor alle fouten die optreden bij numerieke berekeningen.

6

OverflowError

Verhoogd wanneer een berekening de maximumlimiet voor een numeriek type overschrijdt.

7

FloatingPointError

Verhoogd wanneer een drijvende-kommaberekening mislukt.

8

ZeroDivisionError

Verhoogd wanneer deling of modulo door nul plaatsvindt voor alle numerieke typen.

9

AssertionError

Verhoogd in geval van falen van de Assert-verklaring.

10

Kenmerkfout

Verhoogd in geval van falen van attribuutverwijzing of toewijzing.

11

EOFEror

Verhoogd wanneer er geen invoer is van de functie raw_input() of input() en het einde van het bestand is bereikt.

12

ImportError

Wordt verhoogd wanneer een importverklaring mislukt.

13

Toetsenbordonderbreking

Wordt verhoogd wanneer de gebruiker de uitvoering van het programma onderbreekt, meestal door op Ctrl+c te drukken.

14

LookupError

Basisklasse voor alle opzoekfouten.

15

IndexError

Verhoogd wanneer een index niet in een reeks wordt gevonden.

16

KeyError

Wordt verhoogd wanneer de opgegeven sleutel niet in het woordenboek wordt gevonden.

17

NameError

Wordt verhoogd wanneer een identifier niet wordt gevonden in de lokale of globale naamruimte.

18

UnboundLocalError

Verhoogd bij het proberen toegang te krijgen tot een lokale variabele in een functie of methode, maar er is geen waarde aan toegekend.

19

Omgevingsfout

Basisklasse voor alle uitzonderingen die buiten de Python-omgeving optreden.

20

IOError

Wordt verhoogd wanneer een invoer-/uitvoerbewerking mislukt, zoals het printstatement of de functie open() wanneer u probeert een bestand te openen dat niet bestaat.

21

IOError

Verhoogd wegens fouten met betrekking tot het besturingssysteem.

22

SyntaxError

Wordt opgeheven wanneer er een fout is in de Python-syntaxis.

23

IndentationError

Verhoogd wanneer inspringing niet correct is opgegeven.

24

Systeemfout

Wordt opgeheven wanneer de interpreter een intern probleem vindt, maar wanneer deze fout wordt aangetroffen, wordt de Python-interpreter niet afgesloten.

25

Systeemafsluiten

Verhoogd wanneer de Python-interpreter wordt afgesloten door de functie sys.exit() te gebruiken. Als de code niet wordt verwerkt, wordt de interpreter afgesloten.

26

TypeError

Wordt verhoogd wanneer een bewerking of functie wordt geprobeerd die ongeldig is voor het opgegeven gegevenstype.

27

Waardefout

Verhoogd wanneer de ingebouwde functie voor een gegevenstype het geldige type argumenten heeft, maar de argumenten ongeldige waarden hebben opgegeven.

28

RuntimeError

Wordt verhoogd wanneer een gegenereerde fout in geen enkele categorie valt.

29

NotImplementedError

Komt voor wanneer een abstracte methode die in een overgeërfde klasse moet worden geïmplementeerd, niet daadwerkelijk wordt geïmplementeerd.

Beweringen in Python

Een bewering is een sanity-check die u kunt in- of uitschakelen wanneer u klaar bent met het testen van het programma.

De gemakkelijkste manier om aan een bewering te denken, is door deze te vergelijken met een raise-if statement (of om nauwkeuriger te zijn, een raise-if-not-statement). Een uitdrukking wordt getest en als het resultaat onwaar is, wordt er een uitzondering gemaakt.

Beweringen worden uitgevoerd door de assert-instructie, het nieuwste sleutelwoord voor Python, geïntroduceerd in versie 1.5.

Programmeurs plaatsen vaak beweringen aan het begin van een functie om te controleren op geldige invoer, en na een functieaanroep om te controleren op geldige uitvoer.

De bewering Verklaring

Wanneer het een assert-instructie tegenkomt, evalueert Python de bijbehorende expressie, wat hopelijk waar is. Als de uitdrukking onwaar is, roept Python een AssertionError . op uitzondering.

De syntaxis voor beweren is −

assert Expression[, Arguments]

Als de bewering mislukt, gebruikt Python ArgumentExpression als argument voor de AssertionError. AssertionError-uitzonderingen kunnen worden opgevangen en afgehandeld zoals elke andere uitzondering met behulp van de try-except-instructie, maar als ze niet worden afgehandeld, beëindigen ze het programma en produceren ze een traceback.

Voorbeeld

Hier is een functie die een temperatuur omzet van graden Kelvin naar graden Fahrenheit. Aangezien nul graden Kelvin zo koud is als het maar kan, springt de functie uit als het een negatieve temperatuur ziet −

Live demo
#!/usr/bin/python
def KelvinToFahrenheit(Temperature):
   assert (Temperature >= 0),"Colder than absolute zero!"
   return ((Temperature-273)*1.8)+32
print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)

Wanneer de bovenstaande code wordt uitgevoerd, levert dit het volgende resultaat op −

32.0
451
Traceback (most recent call last):
File "test.py", line 9, in <module>
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!

Wat is uitzondering?

Een uitzondering is een gebeurtenis die optreedt tijdens de uitvoering van een programma die de normale stroom van de instructies van het programma verstoort. In het algemeen, wanneer een Python-script een situatie tegenkomt die het niet aankan, roept het een uitzondering op. Een uitzondering is een Python-object dat een fout vertegenwoordigt.

Wanneer een Python-script een uitzondering genereert, moet het de uitzondering onmiddellijk afhandelen, anders wordt het beëindigd en afgesloten.

Een uitzondering afhandelen

Als u enkele verdachte heeft code die een uitzondering kan veroorzaken, kunt u uw programma verdedigen door de verdachte code in een try: . te plaatsen blok. Voeg na de try:block een behalve: . toe statement, gevolgd door een codeblok dat het probleem zo elegant mogelijk afhandelt.

Syntaxis

Hier is een eenvoudige syntaxis van probeer....behalve...else blokken −

try:
   You do your operations here;
   ......................
except ExceptionI:
   If there is ExceptionI, then execute this block.
except ExceptionII:
   If there is ExceptionII, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

Hier zijn enkele belangrijke punten over de bovengenoemde syntaxis −

  • Een enkele try-instructie kan meerdere behalve-instructies hebben. Dit is handig wanneer het try-blok instructies bevat die verschillende soorten uitzonderingen kunnen veroorzaken.

  • U kunt ook een algemene uitzonderingsclausule opgeven, die elke uitzondering afhandelt.

  • Na de uitzonderingsclausule(s), kunt u een else-clausule opnemen. De code in het else-blok wordt uitgevoerd als de code in het try:-blok geen uitzondering genereert.

  • Het else-blok is een goede plaats voor code die geen try:block's bescherming nodig heeft.

Voorbeeld

Dit voorbeeld opent een bestand, schrijft inhoud in het bestand en komt er netjes uit omdat er helemaal geen probleem is −

Live demo
#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"
   fh.close()

Dit levert het volgende resultaat op −

Written content in the file successfully

Voorbeeld

Dit voorbeeld probeert een bestand te openen waarvoor u geen schrijfrechten heeft, dus er wordt een uitzondering gegenereerd −

Live demo
#!/usr/bin/python

try:
   fh = open("testfile", "r")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"

Dit levert het volgende resultaat op −

Error: can't find file or read data

De behalve Clausule zonder uitzonderingen

U kunt ook de uitzonderingsverklaring gebruiken zonder uitzonderingen die als volgt zijn gedefinieerd −

try:
   You do your operations here;
   ......................
except:
   If there is any exception, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

Dit soort probeer-behalve statement vangt alle uitzonderingen op die zich voordoen. Het gebruik van dit soort try-except-statement wordt echter niet als een goede programmeerpraktijk beschouwd, omdat het alle uitzonderingen opvangt, maar de programmeur niet de oorzaak van het probleem dat zich kan voordoen kan identificeren.

De behalve Clausule met meerdere uitzonderingen

Je kunt ook dezelfde behalve . gebruiken statement om meerdere uitzonderingen als volgt af te handelen −

try:
   You do your operations here;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   If there is any exception from the given exception list, 
   then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

De try-final-clausule

U kunt een eindelijk: . gebruiken blokkeer samen met een probeer: blok. Het laatste blok is een plaats om elke code te plaatsen die moet worden uitgevoerd, of de try-block een uitzondering heeft gegenereerd of niet. De syntaxis van de try-finally-instructie is deze −

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

U kunt else . niet gebruiken clausule samen met een laatste clausule.

Voorbeeld

Live demo
#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
finally:
   print "Error: can\'t find file or read data"

Als u geen toestemming heeft om het bestand in de schrijfmodus te openen, geeft dit het volgende resultaat −

Error: can't find file or read data

Hetzelfde voorbeeld kan als volgt zuiverder worden geschreven −

Live demo
#!/usr/bin/python

try:
   fh = open("testfile", "w")
   try:
      fh.write("This is my test file for exception handling!!")
   finally:
      print "Going to close the file"
      fh.close()
except IOError:
   print "Error: can\'t find file or read data"

Wanneer een uitzondering wordt gegenereerd in de try blok, gaat de uitvoering onmiddellijk naar de eindelijk blok. Na alle uitspraken in de eindelijk blok worden uitgevoerd, wordt de uitzondering opnieuw gegenereerd en wordt afgehandeld in de behalve instructies indien aanwezig in de volgende hogere laag van de try-behalve verklaring.

Argument van een uitzondering

Een uitzondering kan een argument . hebben , wat een waarde is die aanvullende informatie over het probleem geeft. De inhoud van het argument verschilt per uitzondering. U legt het argument van een uitzondering vast door als volgt een variabele in de behalve-clausule op te geven −

try:
   You do your operations here;
   ......................
except ExceptionType, Argument:
   You can print value of Argument here...

Als u de code schrijft om een ​​enkele uitzondering af te handelen, kunt u een variabele de naam van de uitzondering in de uitzonderingsverklaring laten volgen. Als u meerdere uitzonderingen vangt, kunt u een variabele de tupel van de uitzondering laten volgen.

Deze variabele krijgt de waarde van de uitzondering die meestal de oorzaak van de uitzondering bevat. De variabele kan een enkele waarde of meerdere waarden ontvangen in de vorm van een tupel. Deze tuple bevat meestal de foutreeks, het foutnummer en een foutlocatie.

Voorbeeld

Hieronder volgt een voorbeeld voor een enkele uitzondering −

Live demo
#!/usr/bin/python

# Define a function here.
def temp_convert(var):
   try:
      return int(var)
   except ValueError, Argument:
      print "The argument does not contain numbers\n", Argument

# Call above function here.
temp_convert("xyz");

Dit levert het volgende resultaat op −

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'

Een uitzondering verhogen

U kunt exceptions op verschillende manieren verhogen door gebruik te maken van het raise statement. De algemene syntaxis voor de raise verklaring is als volgt.

Syntaxis

raise [Exception [, args [, traceback]]]

Hier, Uitzondering is het type uitzondering (bijvoorbeeld NameError) en argument is een waarde voor het uitzonderingsargument. Het argument is optioneel; indien niet opgegeven, is het uitzonderingsargument Geen.

Het laatste argument, traceback, is ook optioneel (en wordt in de praktijk zelden gebruikt), en indien aanwezig, is het het traceback-object dat voor de uitzondering wordt gebruikt.

Voorbeeld

Een uitzondering kan een string, een klasse of een object zijn. De meeste uitzonderingen die de Python-kern oproept, zijn klassen, met een argument dat een instantie van de klasse is. Het definiëren van nieuwe uitzonderingen is vrij eenvoudig en kan als volgt worden gedaan −

def functionName( level ):
   if level < 1:
      raise "Invalid level!", level
      # The code below to this would not be executed
      # if we raise the exception

Opmerking: Om een ​​uitzondering op te vangen, moet een "behalve"-clausule verwijzen naar dezelfde uitzondering die wordt gegenereerd door een klasseobject of een eenvoudige tekenreeks. Om bijvoorbeeld bovenstaande uitzondering vast te leggen, moeten we de uitzonderingsclausule als volgt schrijven −

try:
   Business Logic here...
except "Invalid level!":
   Exception handling here...
else:
   Rest of the code here...

Door de gebruiker gedefinieerde uitzonderingen

Met Python kun je ook je eigen uitzonderingen maken door klassen af ​​te leiden van de standaard ingebouwde uitzonderingen.

Hier is een voorbeeld gerelateerd aan RuntimeError . Hier wordt een klasse gemaakt die is gesubklasseerd van RuntimeError . Dit is handig wanneer u meer specifieke informatie moet weergeven wanneer een uitzondering wordt opgevangen.

In het try-blok wordt de door de gebruiker gedefinieerde uitzondering gegenereerd en gevangen in het behalve-blok. De variabele e wordt gebruikt om een ​​instantie van de klasse Networkerror . te maken .

class Networkerror(RuntimeError):
   def __init__(self, arg):
      self.args = arg

Dus als je de bovenstaande klasse eenmaal hebt gedefinieerd, kun je de uitzondering als volgt verhogen −

try:
   raise Networkerror("Bad hostname")
except Networkerror,e:
   print e.args

Python

  1. Python-gegevenstypen
  2. Python-operators
  3. Python pass-instructie
  4. Python-functieargumenten
  5. Python-woordenboek
  6. Python-fouten en ingebouwde uitzonderingen
  7. Afhandeling van Python-uitzonderingen met behulp van de instructie try, behalve en tenslotte
  8. Aangepaste Python-uitzonderingen
  9. Python-iterators
  10. Python-sluitingen
  11. Python datetime