LU05.A03: Exceptions auslösen und verarbeiten
- Sie können eigene Exceptions erzeugen und werfen.
- Sie können mit
try…except
den Fehler auffangen und behandeln.
Ausgangslage
In der Applikation können eine Anzahl Noten erfasst und ausgelesen werden. Bisher wurde aber noch keine Fehlerbehandlung realisiert. Zum Beispiel stürzt das Programm ab, wenn man eine undefinierte Noten lesen will (falscher Index). Ungültige Noten werden entgegengenommen und wenn zu viele Noten erfasst werden, passiert auch nichts.
Für eine gezielte Fehlerbehandlung definieren wir daher 3 eigene Exceptions:
- ListIndexException: Die Liste hat weniger Elemente als der angegebene Index.
- ListRangeException: Es sollen mehr Elemente als zulässig eingefügt werden.
- ValueRangeException: Der Notenwert ist ungültig (kleiner 1.0 oder grösser 6.0)
Vorbereitung
- Akzeptieren Sie das Assignment in GitHub Classroom.
- Klonen Sie das Repository in Ihre Entwicklungsumgebung.
- Führen Sie das Programm aus. Was fällt Ihnen bezüglich dem Programmablauf auf?
Auftrag 1: Ungültiger Index bei ''take_grade''
Prüfen Sie in der Methode take_grade(self, index)
ob der Index auf ein gültiges Listenelement zeigt.
Beachten Sie, dass die maximale Grösse - durch self._MAX_GRADE_COUNT = 5
festgelegt - nicht dem Index der erfassten Noten entspricht!
- Erstellen Sie die Klasse
ListIndexException
in der Dateiexceptions.py
.
Die Fehlermeldung lautet: „Fehler: Ungültiger Index: …“, wobei … für den aktuellen Wert des Index steht. - Passen Sie die Methode
take_grade()
so an, dass bei einem ungültigen Index eineListIndexException
erzeugt wird. - Testen Sie die Methode
take_grade()
mit den Testfällentest_list_index_ok
undtest_list_index_exception
.
Auftrag 2: Zufügen von Noten in ''add_grade'' überwachen
Prüfen Sie in der Methode add_grade(self, grade)
ob der Wert einer gültigen Note (1.0 … 6.0) entspricht und ob nicht zuviele Noten zugefügt werden.
Die Grösse der Liste wird - wie oben erwähnt - durch self._MAX_GRADE_COUNT
festgelegt.
- Erstellen Sie die Klassen
ListRangeException
undValueRangeException
in der Dateiexceptions.py
.- Die Fehlermeldung für
ListRangeException
lautet : „Fehler: Zu viele Werte eingegeben“. - Die Fehlermeldung für
ValueRangeException
lautet: „Fehler: Der Notenwert muss im Bereich 1.0 bis 6.0 liegen. Er beträgt jedoch …“, wobei … für den aktuellen Notenwert steht.
- Passen Sie die Methode
add_grade()
so an, dass bei einem falschen Notenwert die ExceptionValueRangeException
und bei zu vielen zugefügten WertenListRangeException
erzeugt werden. - Testen Sie die Methode
add_grade()
mit den Testfällentest_value_range_ok
,test_value_range_low
,test_value_range_high
undtest_number_too_large
.
Auftrag 3: Exceptions in ''main'' überwachen und verarbeiten
In der Methode main()
müssen die Exception verarbeitet werden.
Überall wo die Methode add_grade()
bzw. take_grade()
aufgerufen werden, müssen Sie dies in einem try
/ except
-Block machen.
Innerhalb eines try
-Blocks wird die Programmausführung unterbrochen, sobald eine Exception auftritt, d.h. dass der nachfolgende Code im Block nicht ausgeführt wird.
Damit in unserem Fall das Programm weiter läuft, schützen Sie bitte nur die kritischen Bereiche explizit mit try-except
(Also nur den einen Aufruf der Methoden add_grade(…)
bzw- take_garde(…)
).
Falls eine Exception auftritt, wird die Standardmeldung der Exception ausgegeben.
- Prüfen Sie in einem ersten Teil des Codes die Anzahl der zugefügten Noten.
- Prüfen Sie dann einen ungültigen Notenwert.
- Prüfen Sie dann den Zugriff auf eine nicht vorhandene Note.
- Führen Sie das Programm aus. Es darf zu keinem Programmabbruch mehr kommen.
Dauer
45 Minuten
Abgabe
Mittels Push auf GitHub.
⇒ GitHub Repo für externe Besucher
GitHub Repository https://github.com/templates-python/m320-lu05-a03-raise
Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden