Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:archiv:m320:learningunits:lu03:theorie:lu4-kapitel_3 [2026/08/30 14:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | modul:archiv:m320:learningunits:lu03:theorie:lu4-kapitel_3 [2026/08/30 14:09] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden 74.7.243.195 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | === 3. Eigene Exception auslösen === | ||
| + | Wie im Kapitel 2 erwähnt, sind es oft Benutzereingaben, | ||
| + | ----- | ||
| + | |||
| + | //Beispiel 3.2: Personendaten erfassen// | ||
| + | In eine Eingabefeld kann die Körpergrösse eines Menschen eingegeben werden.\\ | ||
| + | {{modul: | ||
| + | //Abb 3.3:// Eingabe mit begrenztem Wertebereich \\ | ||
| + | |||
| + | Es ist klar ersichtlich, | ||
| + | |||
| + | ----- | ||
| + | |||
| + | |||
| + | **Warum wirft man eigene Exception? | ||
| + | Ein Fehler stellt immer eine Ausnahme im Ablauf des Programms dar. Natürlich kann man z.B. den Wert -1 (bei Zahlen) als Fehlercode zurückgaben. Aber was, wenn eben auch negative Werte zulässig sind? Dieses Beispiel haben wir in der Aufgabe 4 der LU02 bei der Klasse '' | ||
| + | Es ist also um vieles besser, wenn im Fehlerfall ein entsprechendes Fehlerobjekt erzeugt und geworfen wird. Auf dieses Fehlerobjekt kann dann an anderer Stelle im Code mittels '' | ||
| + | |||
| + | ----- | ||
| + | |||
| + | //Beispiel 3.3: Körpergrösse überwachen// | ||
| + | <code python> | ||
| + | class BodySizeError(Exception): | ||
| + | """ | ||
| + | Dieser Fehlerfall wird ausgelöst, wenn die vom | ||
| + | Benutzer eingegebene Körpergrösse nicht im Bereich | ||
| + | 20...250 cm liegt. | ||
| + | """ | ||
| + | def __init__(self, | ||
| + | super().__init__(f' | ||
| + | |||
| + | |||
| + | class Person(): | ||
| + | def __init__(self, | ||
| + | self._name = name | ||
| + | self._body_size = 0 | ||
| + | |||
| + | @property | ||
| + | def body_size(self): | ||
| + | return self._body_size | ||
| + | |||
| + | @body_size.setter | ||
| + | def body_size(self, | ||
| + | if 50 <= size <= 250: | ||
| + | self._body_size = size | ||
| + | else: | ||
| + | raise BodySizeError(size) | ||
| + | |||
| + | if __name__ == ' | ||
| + | jonathan = Person(' | ||
| + | try: | ||
| + | size = int(input(' | ||
| + | jonathan.body_size = size | ||
| + | except BodySizeError as body_size_error: | ||
| + | print(body_size_error) | ||
| + | # OK hier gehts weiter | ||
| + | print(' | ||
| + | </ | ||
| + | Kopieren Sie den Code in Ihre Entwicklungsumgebung und spielen Sie mit ein paar Eingabewerten. Schauen Sie, was der jeweilge Effekt ist. | ||
| + | ----- | ||
| + | |||
| + | Im Folgenden betrachten wir die Codesequenzen, | ||
| + | \\ | ||
| + | - Die Deklaration der eigenen Fehlerklasse als Ableitung der Klasse '' | ||
| + | - Aufruf des Konstruktors in der Oberklasse (hier Exception) \\ In der Regel verwendet man den Konstruktor der Oberklasse, um das Objekt vollständig zu initialisieren. Das sieht dann wie Folgt aus: \\ <code Python> | ||
| + | - Auslösen der Exception im eigenen Code. <code Python> | ||
| + | | ||
| + | else: | ||
| + | raise BodySizeError(size) # hier wird das Fehlerobjekt erzeugt und " | ||
| + | - Fehlerobjekt benennen und Aktion für den Fehlerfall ausführen. <code Python> | ||
| + | print(body_size_error) </ | ||
| + | \\ | ||
| + | ** Was läuft im Code ab?** \\ | ||
| + | {{modul: | ||
| + | //Abb 3.4:// Ablauf bei einer Exception\\ | ||
| + | |||
| + | ---- | ||
| + | [[https:// | ||