Die Sammlung all dieser Werkzeuge ist die Basis eines erfolgreichen Programmierers und Programmiererin. Der Bezug zu den früher vorgestellten Konzepten ist, dass diese Techniken darauf aufbauen oder weiterführende Aspekte beinhalten. Insbesondere behandeln diese Techniken die Themen, die im "Alltag" ständig verwendet werden. Es handelt sich hierbei um:
*.py
.
Eine Sammlung derer kann eine Programmbibliothek bilden.Gibt es einen Fehler, einen unvorhergesehenen Zustand oder einen falschen bzw. unerwarteten Wert,
so erlauben "Exception
"s und "Error
"s das Programm abzubrechen.
Dabei handelt es sich um ein Objekt, das die Fehlermeldung beinhaltet und zu einem bestimmten Typ gehört.
Es gibt auch es die Möglichkeit eine Exception aufzuhalten. Dann bricht das Programm nicht vollständig ab, sondern läuft an der Stelle wo die Exception aufgefangen wurde weiter.
Beispiel: Eine Funktion erwartet, dass ihr eine positive Zahl übergeben wird. Es wird jedoch eine negative Übergeben und die "Katastrophe" abgewendet.
def f(x):
if x < 0:
raise ValueError("x ist negativ!")
from math import sqrt
return sqrt(x) - 1
f(2)
0.41421356237309515
f(-2)
ValueErrorTraceback (most recent call last) <ipython-input-5-0b4aa96ed178> in <module>() ----> 1 f(-2) <ipython-input-3-5236570ce6fc> in f(x) 1 def f(x): 2 if x < 0: ----> 3 raise ValueError("x ist negativ!") 4 from math import sqrt 5 return sqrt(x) - 1 ValueError: x ist negativ!
Nun fangen wir diesen Fehler mit einer try
-except
Konstruktion ab:
def outer(k = 2):
try:
x = k - 10
z = f(x)
print("Kein Problem, z=%f" % z)
except Exception as e:
print("Es gab einen Fehler: %s" % e)
# rückgabe von 0 als fallback
return 0
return z
outer()
Es gab einen Fehler: x ist negativ!
0
outer(12)
Kein Problem, z=0.414214
0.41421356237309515
Beachte: Die Zeile print("Kein Problem...")
wird nur dann ausgeführt,
wenn es keine Exception gab.
Soll ein Code in jedem Fall ausgeführt werden, gibt es noch das finally:
Schlüsselwort.
Soll hingegen wenn es keinen Fehler gab ein Codeblock ausgeführt werden,
schreibt man dies in ein else:
.
Zusammengefasst ist die volle Struktur so:
try:
... führe aus ...
... mit möglichen ...
... Fehlern ...
except FehlerTyp as variable:
... Fehlerbehandlung des Fehlers <variable> ...
finally:
... Egal ob Fehler oder nicht ...
else:
... es gab keinen Fehler ...
Häufig verwendete Type von Fehlern sind:
https://docs.python.org/2/library/exceptions.html
Es ist auch möglich, eigene Exceptions zu definieren.
class CrazyException(Exception):
def __init__(self, msg):
super(CrazyException, self).__init__(msg)
def __str__(self):
return "This is crazy! %s" % super(CrazyException, self).args
ex = CrazyException("Calculation error.")
print(ex)
This is crazy! Calculation error.