Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Python - Behandlung von Ausnahmen

Vorherige SeiteNächste Seite

Python bietet zwei sehr wichtige Funktionen, um unerwartete Fehler in Ihren Python-Programmen zu behandeln und ihnen Debugging-Fähigkeiten hinzuzufügen −

Liste der Standardausnahmen −

Sr.No. Name und Beschreibung der Ausnahme
1

Ausnahme

Basisklasse für alle Ausnahmen

2

Stop Iteration

Wird ausgelöst, wenn die Methode next() eines Iterators auf kein Objekt zeigt.

3

SystemExit

Wird von der Funktion sys.exit() ausgelöst.

4

Standardfehler

Basisklasse für alle eingebauten Ausnahmen außer StopIteration und SystemExit.

5

Arithmetikfehler

Basisklasse für alle Fehler, die bei numerischen Berechnungen auftreten.

6

Überlauffehler

Wird ausgelöst, wenn eine Berechnung die maximale Grenze für einen numerischen Typ überschreitet.

7

FloatingPointError

Wird ausgelöst, wenn eine Gleitkommaberechnung fehlschlägt.

8

ZeroDivisionError

Wird ausgelöst, wenn für alle numerischen Typen eine Division oder Modulo durch Null stattfindet.

9

Bestätigungsfehler

Wird ausgelöst, wenn die Assert-Anweisung fehlschlägt.

10

Attributfehler

Wird ausgelöst, wenn die Attributreferenz oder -zuweisung fehlschlägt.

11

EOFFehler

Wird ausgelöst, wenn weder von der raw_input()- noch von der input()-Funktion eine Eingabe erfolgt und das Dateiende erreicht ist.

12

Importfehler

Wird ausgelöst, wenn eine Importanweisung fehlschlägt.

13

Tastaturunterbrechung

Wird ausgelöst, wenn der Benutzer die Programmausführung unterbricht, normalerweise durch Drücken von Strg+c.

14

Suchfehler

Basisklasse für alle Suchfehler.

15

IndexFehler

Wird ausgelöst, wenn ein Index in einer Sequenz nicht gefunden wird.

16

Schlüsselfehler

Wird ausgelöst, wenn der angegebene Schlüssel nicht im Wörterbuch gefunden wird.

17

Namensfehler

Wird ausgelöst, wenn ein Bezeichner nicht im lokalen oder globalen Namensraum gefunden wird.

18

UnboundLocalError

Wird ausgelöst, wenn versucht wird, auf eine lokale Variable in einer Funktion oder Methode zuzugreifen, dieser jedoch kein Wert zugewiesen wurde.

19

Umgebungsfehler

Basisklasse für alle Ausnahmen, die außerhalb der Python-Umgebung auftreten.

20

IOFehler

Wird ausgelöst, wenn eine Eingabe-/Ausgabeoperation fehlschlägt, wie z. B. die Druckanweisung oder die open()-Funktion beim Versuch, eine Datei zu öffnen, die nicht existiert.

21

IOFehler

Wird für betriebssystembezogene Fehler ausgelöst.

22

Syntaxfehler

Wird ausgelöst, wenn ein Fehler in der Python-Syntax vorliegt.

23

Einrückungsfehler

Wird ausgelöst, wenn der Einzug nicht richtig angegeben ist.

24

Systemfehler

Wird ausgelöst, wenn der Interpreter ein internes Problem findet, aber wenn dieser Fehler auftritt, wird der Python-Interpreter nicht beendet.

25

SystemExit

Wird ausgelöst, wenn der Python-Interpreter mithilfe der Funktion sys.exit() beendet wird. Wenn es nicht im Code behandelt wird, wird der Interpreter beendet.

26

TypeError

Wird ausgelöst, wenn eine Operation oder Funktion versucht wird, die für den angegebenen Datentyp ungültig ist.

27

WertFehler

Wird ausgelöst, wenn die integrierte Funktion für einen Datentyp den gültigen Typ von Argumenten hat, aber die Argumente ungültige Werte angegeben haben.

28

Laufzeitfehler

Wird ausgelöst, wenn ein generierter Fehler in keine Kategorie fällt.

29

Nicht implementierter Fehler

Wird ausgelöst, wenn eine abstrakte Methode, die in einer geerbten Klasse implementiert werden muss, nicht tatsächlich implementiert ist.

Behauptungen in Python

Eine Assertion ist eine Plausibilitätsprüfung, die Sie ein- oder ausschalten können, wenn Sie mit dem Testen des Programms fertig sind.

Die einfachste Art, sich eine Behauptung vorzustellen, besteht darin, sie mit einem raise-if zu vergleichen -Anweisung (oder genauer gesagt eine Raise-if-not-Anweisung). Ein Ausdruck wird getestet, und wenn das Ergebnis falsch ist, wird eine Ausnahme ausgelöst.

Zusicherungen werden von der assert-Anweisung ausgeführt, dem neuesten Schlüsselwort von Python, das in Version 1.5 eingeführt wurde.

Programmierer platzieren oft Zusicherungen am Anfang einer Funktion, um auf gültige Eingaben zu prüfen, und nach einem Funktionsaufruf, um auf gültige Ausgaben zu prüfen.

Die Behauptung Aussage

Wenn es auf eine assert-Anweisung trifft, wertet Python den begleitenden Ausdruck aus, der hoffentlich wahr ist. Wenn der Ausdruck falsch ist, löst Python einen AssertionError aus Ausnahme.

Die Syntax für assert ist −

assert Expression[, Arguments]

Wenn die Assertion fehlschlägt, verwendet Python ArgumentExpression als Argument für AssertionError. AssertionError-Ausnahmen können wie jede andere Ausnahme mit der try-except-Anweisung abgefangen und behandelt werden, aber wenn sie nicht behandelt werden, beenden sie das Programm und erzeugen eine Rückverfolgung.

Beispiel

Hier ist eine Funktion, die eine Temperatur von Grad Kelvin in Grad Fahrenheit umwandelt. Da Null Grad Kelvin so kalt wie möglich ist, springt die Funktion ab, wenn sie eine negative Temperatur sieht −

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)

Wenn der obige Code ausgeführt wird, erzeugt er das folgende Ergebnis −

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!

Was ist Ausnahme?

Eine Ausnahme ist ein Ereignis, das während der Ausführung eines Programms auftritt und den normalen Ablauf der Programmanweisungen unterbricht. Wenn ein Python-Skript auf eine Situation stößt, die es nicht bewältigen kann, löst es im Allgemeinen eine Ausnahme aus. Eine Ausnahme ist ein Python-Objekt, das einen Fehler darstellt.

Wenn ein Python-Skript eine Ausnahme auslöst, muss es die Ausnahme entweder sofort behandeln, andernfalls wird es beendet und beendet.

Behandlung einer Ausnahme

Wenn Sie etwas verdächtig haben Code, der möglicherweise eine Ausnahme auslöst, können Sie Ihr Programm verteidigen, indem Sie den verdächtigen Code in ein try: einfügen Block. Fügen Sie nach dem try:-Block ein außer: ein -Anweisung, gefolgt von einem Codeblock, der das Problem so elegant wie möglich behandelt.

Syntax

Hier ist eine einfache Syntax von try....außer...else Blöcke −

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 sind einige wichtige Punkte über die oben erwähnte Syntax −

Beispiel

Dieses Beispiel öffnet eine Datei, schreibt Inhalt in die Datei und kommt sauber heraus, weil es überhaupt kein Problem gibt −

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()

Dies erzeugt das folgende Ergebnis −

Written content in the file successfully

Beispiel

Dieses Beispiel versucht, eine Datei zu öffnen, für die Sie keine Schreibberechtigung haben, daher wird eine Ausnahme ausgelöst −

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"

Dies erzeugt das folgende Ergebnis −

Error: can't find file or read data

Die außer Klausel ohne Ausnahmen

Sie können die except-Anweisung auch ohne wie folgt definierte Ausnahmen verwenden −

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. 

Diese Art von Ausprobieren -Anweisung fängt alle auftretenden Ausnahmen ab. Die Verwendung dieser Art von Try-Except-Anweisung wird jedoch nicht als gute Programmierpraxis angesehen, da sie alle Ausnahmen abfängt, den Programmierer jedoch nicht dazu bringt, die Grundursache des möglicherweise auftretenden Problems zu identifizieren.

Die außer Klausel mit mehreren Ausnahmen

Sie können auch dasselbe außer verwenden -Anweisung, um mehrere Ausnahmen wie folgt zu behandeln −

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. 

Die try-finally-Klausel

Sie können ein finally: verwenden block zusammen mit einem try: Block. Der finally-Block ist ein Ort, an dem Code eingefügt werden muss, der ausgeführt werden muss, unabhängig davon, ob der try-block eine Ausnahme ausgelöst hat oder nicht. Die Syntax der try-finally-Anweisung lautet wie folgt:−

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

Sie können else nicht verwenden Klausel sowie zusammen mit einer finally-Klausel.

Beispiel

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"

Wenn Sie keine Berechtigung haben, die Datei im Schreibmodus zu öffnen, führt dies zu folgendem Ergebnis −

Error: can't find file or read data

Dasselbe Beispiel kann wie folgt sauberer geschrieben werden −

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"

Wenn beim try eine Ausnahme ausgelöst wird -Block geht die Ausführung sofort zum finally über Block. Nach all den Aussagen im endlich Block ausgeführt werden, wird die Ausnahme erneut ausgelöst und in der außer behandelt Anweisungen, falls in der nächsthöheren Schicht des try-except vorhanden Aussage.

Argument einer Ausnahme

Eine Ausnahme kann ein Argument haben , bei dem es sich um einen Wert handelt, der zusätzliche Informationen zum Problem liefert. Der Inhalt des Arguments variiert je nach Ausnahme. Sie erfassen das Argument einer Ausnahme, indem Sie wie folgt eine Variable in der Except-Klausel angeben −

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

Wenn Sie den Code schreiben, um eine einzelne Ausnahme zu behandeln, können Sie eine Variable hinter dem Namen der Ausnahme in der except-Anweisung haben. Wenn Sie mehrere Ausnahmen abfangen, können Sie dem Tupel der Ausnahme eine Variable folgen lassen.

Diese Variable erhält den Wert der Ausnahme, der meistens die Ursache der Ausnahme enthält. Die Variable kann einen einzelnen Wert oder mehrere Werte in Form eines Tupels erhalten. Dieses Tupel enthält normalerweise die Fehlerzeichenfolge, die Fehlernummer und einen Fehlerort.

Beispiel

Es folgt ein Beispiel für eine einzelne Ausnahme −

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");

Dies erzeugt das folgende Ergebnis −

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

Auslösen einer Ausnahme

Sie können Ausnahmen auf verschiedene Arten auslösen, indem Sie die raise-Anweisung verwenden. Die allgemeine Syntax für die Erhöhung Anweisung lautet wie folgt.

Syntax

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

Hier, Ausnahme ist der Typ der Ausnahme (z. B. NameError) und Argument ist ein Wert für das Ausnahmeargument. Das Argument ist optional; wenn nicht angegeben, ist das Ausnahmeargument None.

Das letzte Argument, Traceback, ist ebenfalls optional (und wird in der Praxis selten verwendet) und ist, falls vorhanden, das Traceback-Objekt, das für die Ausnahme verwendet wird.

Beispiel

Eine Ausnahme kann ein String, eine Klasse oder ein Objekt sein. Die meisten Ausnahmen, die der Python-Kern auslöst, sind Klassen mit einem Argument, das eine Instanz der Klasse ist. Das Definieren neuer Ausnahmen ist recht einfach und kann wie folgt durchgeführt werden −

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

Hinweis: Um eine Ausnahme abzufangen, muss eine "außer"-Klausel auf dieselbe Ausnahme verweisen, die entweder als Klassenobjekt oder als einfache Zeichenfolge ausgelöst wird. Um beispielsweise die obige Ausnahme zu erfassen, müssen wir die Exception-Klausel wie folgt schreiben −

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

Benutzerdefinierte Ausnahmen

Mit Python können Sie auch Ihre eigenen Ausnahmen erstellen, indem Sie Klassen von den standardmäßig eingebauten Ausnahmen ableiten.

Hier ist ein Beispiel zu RuntimeError . Hier wird eine Klasse erstellt, die von RuntimeError abgeleitet ist . Dies ist nützlich, wenn Sie spezifischere Informationen anzeigen müssen, wenn eine Ausnahme abgefangen wird.

Im Try-Block wird die benutzerdefinierte Ausnahme ausgelöst und im Except-Block abgefangen. Die Variable e wird verwendet, um eine Instanz der Klasse Networkerror zu erstellen .

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

Sobald Sie also die obige Klasse definiert haben, können Sie die Ausnahme wie folgt auslösen −

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

Python

  1. Python-Datentypen
  2. Python-Operatoren
  3. Python-pass-Anweisung
  4. Python-Funktionsargumente
  5. Python-Wörterbuch
  6. Python-Fehler und eingebaute Ausnahmen
  7. Python-Ausnahmebehandlung Mit der try-, except- und finally-Anweisung
  8. Benutzerdefinierte Python-Ausnahmen
  9. Python-Iteratoren
  10. Python-Schließungen