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 per with-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.