User Tools

Site Tools


error_py

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
error_py [2017/06/29 14:58] – [try catch remove] ggerror_py [2017/06/29 15:37] (current) – [try catch remove] gg
Line 1: Line 1:
 ====== Fehlerbehandlung mit Python ====== ====== Fehlerbehandlung mit Python ======
  
-In den seltensten Fällen, will man, dass ein Programm bei fehlerhafter Eingabe abstürzt. Dafür gibts es Fehlerbehandlung. Es ist zwar auch grundsätzlich eine gute Idee so zu programmieren, dass keine Abstürze passieren. Damit ist gemeint, dass jede Eingabe geprüft werden muss. Wird bei der Frage nach dem Alter irgendein Text eingegeben so kommt es im Laufe der Berechnungen bestimmt zu Fehlern. \\ +In den seltensten Fällen, will man, dass ein Programm bei fehlerhafter Eingabe abstürzt. Dafür gibts es Fehlerbehandlung. Es ist zwar auch grundsätzlich eine gute Idee so zu programmieren, dass keine Abstürze passieren. Damit ist gemeint, dass jede Eingabe geprüft werden muss. Wird bei der Frage nach dem Alter irgendein Text eingegeben so kommt es im Laufe der Berechnungen bestimmt zu Fehlern. Prüft man direkt bei der Eingabe, ob eine Zahl eingegeben wurde, kann man sofort den Benutzer informieren, dass etwas nicht stimmt \\ 
-Leider lassen sich Fehler trotzdem nicht gänzlich verhindern. Was uns wieder zur Fehlerbehandler (oder ExceptionHandling) bringt und hier beschrieben wird. \\+Leider lassen sich Fehler trotzdem nicht gänzlich verhindern. Was uns wieder zur Fehlerbehandlund (oder ExceptionHandling) bringt und hier beschrieben wird. \\
  
-Bei den Listen [[struct_py_list|lists in Python3]] sind zwei Beispiele vorgekommen, die abstürzen. Das war die Methode [[struct_py_list#remove|listremove_element]] und die Methode [[struct_py_list#remove|listindex_element]]. Hier wird das Programm absturzfrei gemacht.+Bei den Listen [[struct_py_list|lists in Python3]] sind zwei Beispiele vorgekommen, die abstürzen. Das war die Methode [[struct_py_list#listremove_element|remove]] und die Methode [[struct_py_list#listindex_element|index]]. Hier wird das remove Programm absturzfrei gemacht.
  
 ===== try catch remove ===== ===== try catch remove =====
Line 17: Line 17:
 </code> </code>
  
-Wir packen das nun in einen try catch Block+Wir packen das nun in einen try Block. Im Falle eines ValueErrors springt das Programm in den Except Block 
 <code python> <code python>
 list = [0, 1, 1, 123533219, 2, 3, 5, 8, 13] list = [0, 1, 1, 123533219, 2, 3, 5, 8, 13]
Line 30: Line 31:
 # Nun läuft das Programm weiter und die Liste kann ausgegeben werden # Nun läuft das Programm weiter und die Liste kann ausgegeben werden
 print(list) print(list)
 +</code>
 +
 +Es gibt natürlich Situationen, bei denen verschiedene Fehler auftreten können.
 +
 +<code python>
 +# Das brauchen wir um Informationen, über den Error zu bekommen, deshalb importieren wir das mal
 +import sys
 +
 +try:
 +    # Der Versuch eine Datei zu öffnen
 +    f = open('myfile.txt')
 +    # Der Versuch eine Zeile aus der Datei zu lesen
 +    s = f.readline()
 +    # Der Versuch die gelesene Zeile in eine Zahl um zu wandeln
 +    i = int(s.strip())
 +except IOError as err:
 +    # IOError kann beim öffnen der Datei passieren. Sei die Datei nicht da, man darf nicht lesend darauf zugreifen, etc, etc
 +    print("I/O error: {0}".format(err))
 +except ValueError:
 +    # Wenn die gelesene Zeile nicht umgewandelt werden kann, passiert ein ValueError
 +    # Beispielsweise wird "Hallo Welt" eingelesen. Was soll das für eine Zahl sein?
 +    print("Konnte Daten nicht in Ganzzahl umwandeln.")
 +except:
 +    # Ein Unbekannter Fehler passiert. Es wird eine Fehlermeldung ausgegeben...
 +    print("Unbekannter Fehler:", sys.exc_info()[0])
 +    # ...und durch raise wird der Error weiter gegeben (Typischer Weise würde das Programm hier abstürzen, sofern der Fehler nicht wo anders abgefangen wird
 +    raise
 </code> </code>
error_py.1498741109.txt.gz · Last modified: 2017/06/29 14:58 by gg