Sinnvoller Einsatz von Exceptions
Generell teilt man den Programmfluss in drei Stufen ein: lowlevel Funktionen, highlevel Funktionen und
GUI
Funktionen. Normalerweise rufen
GUI Funktionen wie Events nur die komplexen highlevel Funktionen auf.
Lowlevel Funktionen sollten nun
Exception frei sein. Die highlevel Funktionen sollten mit Exceptions arbeiten,
da deren Programmierung von aussagekräftigen Funktionsrückgabewerten viel zu kompliziert werden kann.
Exception erleichtern also in highlevel Funktionen deren Aufbau wesentlich.
Exceptions sollten niemals in Release-Funktionen benutzt werden. Der Grund ist ganz einfach: Solche
Funktionen werden meist gruppiert in übergeordneten Funktionen auftreten. Würde nun eine
Exception
ausgelöst, würden die nachfolgenden Release-Funktionen ein Speicherleck verursachen. Würde man es
trotzdem machen, müsste der Programmierer nun jeden Aufruf solcher Release-Funktionen separat mit
einem try-finally schützen. Der Sinn und Zweck von
Exception würde sinnlos werden.
Auf der anderen Seite ist es sinnvoll Exceptions in Allocator-Funktionen zu verwenden. Also in Funktionen in
denen Speicher angefordert wird. Tritt dort eine
Exception auf, wird durch die
Exception verhindert, dass
weiter sinnloser Speicher allokiert wird.
Try-except-Blöcke sollten immer mit Bedacht und sparsam eingesetzt werden. Ein vollständiges
"Abklemmen" aller Exceptions per try-except-Block ist fast immer schlecht aus Sicht der Wartung des
Programmes. Try-except-Blöcke sollten also gezielt nur auf einige
Exception-Typen reagieren. Der Grund ist
offensichtlich. Das Ziel des
Exception-Handlings sollte es sein für den Programmierer aussagekräftige
Ausnahmebedingungen für den Programmfluss zu visualisieren. Setzt man try-except-Blöcke unüberlegt ein,
so kann man dies Ziel nicht erreichen und der Vorteil von Exceptions geht verloren.
Generell gilt: Exceptions nur dann auslösen, wenn eine Bedingung eintrittunter der der Programmfluss
keinesfalls fortsetzbar ist.