Eine Exception (deutsch Ausnahme) ist ein Ereignis, das den normalen Ablauf eines Programms unterbricht, weil zur Laufzeit etwas Unerwartetes passiert ist – etwa eine Division durch null, eine fehlende Datei oder eine ungültige Eingabe. Ohne Behandlung stürzt das Programm ab; mit Fehlerbehandlung kann es reagieren und kontrolliert weiterlaufen.
Try, Catch und Finally
Die meisten Sprachen verwenden das try/catch-Muster: Der gefährdete Code steht im try-Block, die Behandlung im catch-Block und Aufräumarbeiten im optionalen finally-Block.
try:
datei = open("daten.txt")
inhalt = datei.read()
except FileNotFoundError:
print("Datei fehlt – lege sie zuerst an")
finally:
print("Aufräumen abgeschlossen")
In Java und C# funktioniert das Prinzip gleich, nur mit geschweiften Klammern und typisierten Catch-Blöcken:
// Java
try {
int ergebnis = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Division durch null abgefangen");
}
Exceptions sind Objekte
In objektorientierten Sprachen ist eine Exception selbst ein Objekt einer Exception-Klasse. Beim Werfen (Throw) wird es die Aufrufliste hinaufgereicht, bis ein passender catch-Block gefunden wird – oder das Programm endet. Dabei wird ein Stack Trace ausgegeben, der zeigt, wo der Fehler entstanden ist.
Checked und Unchecked Exceptions
- Checked Exceptions (Java): Der Compiler erzwingt, dass die Methode sie behandelt oder weitergibt – sonst kompiliert der Code nicht.
- Unchecked Exceptions: Laufzeitfehler wie
NullPointerException, die nicht zur Kompilierzeit erkennbar sind.
Gute Fehlerbehandlung
- Nur abfangen, was man sinnvoll behandeln kann – leere Catch-Blöcke verschlucken Fehler.
- Beim Weiterwerfen Kontext hinzufügen (etwa welche Datei oder welche Eingabe fehlgeschlagen ist).
- Ressourcen wie Dateien und Verbindungen im
finally-Block oder perwith-Syntax schließen. - Die eigene Exception-Hierarchie nutzen, statt generische Fehlerklassen zu werfen – verwandt mit abhängigkeitsarmen und wartbarem Code.
Exceptions sind eng mit dem Debugging verbunden: Ein sauberer Stack Trace ist das wichtigste Werkzeug, um die Ursache eines Absturzes zu finden. Auch Nullwerte führen oft zu Exceptions – dazu passend das Konzept Nullable.
Verwandte Grundlagen: Funktion, Rückgabewert, Interface. Sprachreferenzen: Python-Befehle, Java-Befehle, C#-Befehle, JavaScript-Befehle, PHP-Befehle.