Multiple Exceptions
Kurz: Die Möglichkeit, in einem einzigen Fehlerbehandlungsblock auf mehrere unterschiedliche Fehlerarten unterschiedlich (oder auch gemeinsam) zu reagieren.
Genauer: Statt für jeden möglichen Fehlertyp einen komplett eigenen try-Block zu schreiben, lassen sich mehrere catch-Zweige an einen einzigen try-Block anhängen — jeder zuständig für eine andere Exception-Art. Manche Sprachen erlauben zusätzlich, mehrere Fehlertypen in einem einzigen catch-Zweig zusammenzufassen, wenn sie gleich behandelt werden sollen.
Im Detail
try {
verarbeiteDatei(pfad);
} catch (FileNotFoundException e) {
System.out.println("Datei existiert nicht: " + pfad);
} catch (IOException e) {
System.out.println("Lesefehler: " + e.getMessage());
} catch (Exception e) {
System.out.println("Unerwarteter Fehler: " + e.getMessage());
}Ein wichtiges Detail bei der Reihenfolge der catch-Zweige: Die meisten Sprachen prüfen sie von oben nach unten und nehmen den ERSTEN passenden — deshalb müssen speziellere Fehlertypen VOR allgemeineren stehen. Steht ein allgemeiner catch (Exception e) als erster Zweig, fängt er auch alle spezielleren Fehlerarten ab, und die spezifischeren catch-Zweige darunter werden nie erreicht (in vielen Sprachen sogar ein Kompilierfehler, weil der Code nachweislich unerreichbar ist).
Manche Sprachen (z. B. Java ab Version 7) erlauben zusätzlich das Zusammenfassen mehrerer Fehlertypen in einem Zweig mit |, wenn dieselbe Behandlung für beide gelten soll:
catch (FileNotFoundException | SecurityException e) {
System.out.println("Zugriff nicht möglich: " + e.getMessage());
}Das vermeidet doppelten Code, wenn zwei unterschiedliche Fehlerursachen (Datei existiert nicht vs. keine Berechtigung) auf dieselbe Weise behandelt werden sollen, aber inhaltlich trotzdem unterschiedliche, benannte Fehlertypen bleiben (im Gegensatz zu einem pauschalen catch (Exception e), der jede Unterscheidung verliert).
Siehe auch: Exceptions, Error Codes