Aufgabe 14 - Robust gegen alles
Aufgabe 14 - Robust gegen alles
Abschnitt betitelt „Aufgabe 14 - Robust gegen alles“Worum geht es?
Abschnitt betitelt „Worum geht es?“Ein Programm, das durch keine Eingabe zum Absturz zu bringen ist: Sie fangen Exceptions gezielt, definieren eigene Exception-Klassen und bauen daraus einen Bankautomaten, der jedem Härtetest standhält (siehe Kapitel Exceptions). Das Konto aus Aufgabe 08 wird dabei auf den professionellen Stand gebracht: Statt Fehlermeldungen zu drucken, wirft es Exceptions, und der Aufrufer entscheidet über die Reaktion.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Exceptions vollständig; Ihr
Accountaus Aufgabe 08. - Python, VS Code; für den Härtetest in Teil D einen Kollegen oder eine Kollegin als Testperson.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie fangen Exceptions gezielt und typspezifisch, nie pauschal.
- Sie entwerfen eigene Exception-Hierarchien und setzen
raisean Funktionsgrenzen ein. - Sie entscheiden begründet, auf welcher Ebene ein Fehler behandelt wird, und formulieren benutzergerechte Meldungen.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: das
try/except-Muster wiedergeben und eine Validierungsschleife nach Vorlage erstellen (Teil A). - Reorganisation und Transfer: eine bestehende Klasse auf Exceptions umbauen und die Behandlung im Aufrufer strukturieren (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: ein Programm gegen unbekannte Eingriffe absichern, Fehlerstrategien bewerten und Transaktionssicherheit entwerfen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Robuste Eingabe
Abschnitt betitelt „Teil A - Robuste Eingabe“- Implementieren Sie
ask_int(prompt, minimum, maximum): fragt so lange, bis eine gültige Ganzzahl im Bereich eingegeben wird. DerValueErrorder Umwandlung wird gefangen; jede Ablehnung erklärt, was falsch war und was erwartet wird. - Testen Sie mit: Buchstaben, leerer Eingabe, Zahl außerhalb des Bereichs, gültiger Zahl. Notieren Sie die vier Reaktionen.
- Ergänzen Sie
ask_float(prompt, minimum, maximum)nach demselben Muster; Beträge wie12.50müssen möglich sein.
Teil B - Eigene Exceptions für das Konto
Abschnitt betitelt „Teil B - Eigene Exceptions für das Konto“- Definieren Sie
AccountError(Exception)und davon abgeleitetInvalidAmountErrorundInsufficientFundsError. Letztere transportiert den Kontostand und den angeforderten Betrag als Attribute (eigener Konstruktor mitsuper().__init__(...)). - Bauen Sie
Accountum:deposit,withdrawundtransferdrucken keine Meldungen mehr, sondern werfen die passenden Exceptions mit aussagekräftigem Text. Begründen Sie in zwei Kommentarsätzen, warum das die bessere Arbeitsteilung zwischen Klasse und Aufrufer ist. - Zeigen Sie in einem kurzen Demo-Block: Der Aufrufer fängt beide Fehlertypen getrennt und formuliert je eine benutzerfreundliche Meldung;
except AccountErrorfängt beide gemeinsam (Vererbung in der Fehlerbehandlung).
Teil C - Der Bankautomat
Abschnitt betitelt „Teil C - Der Bankautomat“- Bauen Sie eine Konsolen-Schleife: Menü mit Einzahlen, Abheben, Kontoauszug, Beenden; alle Zahleneingaben laufen über Ihre Funktionen aus Teil A.
- Alle
AccountError-Fälle werden im Menü behandelt; das Programm läuft danach weiter. Einfinally-Block druckt nach jedem Menüdurchlauf eine Trennlinie, unabhängig vom Ausgang. - Prüfen Sie die Zuständigkeiten: In
Accountsteht kein einzigesprintund keintry; sämtliche Behandlung liegt in der Menü-Schleife. Markieren Sie die Stellen, an denen Sie diese Regel bewusst eingehalten haben.
Teil D - Expertenteil: Härtetest und Transaktionssicherheit
Abschnitt betitelt „Teil D - Expertenteil: Härtetest und Transaktionssicherheit“- Härtetest: Ihre Testperson darf fünf Minuten lang versuchen, den Automaten mit Eingaben zum Absturz zu bringen (Buchstaben, Leereingaben, extreme Zahlen, negative Beträge, Unsinn im Menü). Protokollieren Sie jeden Versuch und die Reaktion des Programms. Jeder Absturz wird behoben und der Versuch wiederholt.
- Erweitern Sie den Automaten um Überweisungen zwischen zwei Konten. Anforderung Transaktionssicherheit: Schlägt die Einzahlung nach erfolgter Abbuchung fehl, muss die Abbuchung rückgängig gemacht werden; unter keinen Umständen darf Geld verschwinden. Entwerfen Sie die Lösung (Reihenfolge der Prüfungen? Rollback im
except?) und dokumentieren Sie Ihre Entscheidung. - Diskutieren Sie in drei Sätzen, warum
except Exception: passim Automaten jeden einzelnen Test aus Punkt 1 “bestehen” würde und trotzdem die schlechteste aller Lösungen ist. - Formulieren Sie eine Regel dafür, wo in einem Programm mit mehreren Schichten (Klasse, Menü, Eingabefunktionen) welche Fehler behandelt werden, und belegen Sie sie mit je einem Beispiel aus Ihrem Code.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Warum sind Exceptions Rückgabewerten wie
-1überlegen? Nennen Sie zwei der drei Gründe aus dem Kapitel. - Was ist an einem nackten
except:gefährlich? - Wozu dient die gemeinsame Basisklasse
AccountError, wenn es ohnehin spezifische Fehlerklassen gibt? - Wann läuft ein
finally-Block, und wofür ist er gedacht? - Eine Hilfsfunktion tief im Programm stellt einen ungültigen Wert fest. Fangen oder werfen? Begründen Sie.
robust.py (Eingabefunktionen und Bankautomat), account.py (umgebaut, mit Exception-Hierarchie) und das Härtetest-Protokoll aus Teil D.