Skip to content

Kapitel 12: Ausnahmebehandlung

12.1 Konzept der Ausnahmen

Ausnahmen sind Fehler während der Programmausführung, die dazu führen können, dass das Programm abstürzt.

12.2 Häufige Ausnahmetypen in Dart

  • FormatException: Formatfehler
  • RangeError: Bereichsfehler
  • NoSuchMethodError: Methode nicht gefunden
  • TypeError: Typfehler

12.3 Ausnahmeabfang und -behandlung (try-catch-finally)

dart
void main() {
  try {
    // Code, der eine Ausnahme werfen könnte
    int ergebnis = 10 ~/ 0;  // Division durch Null
  } catch (e) {
    // Ausnahme abfangen und behandeln
    print('Fehler: ' + e.toString());
  } finally {
    // Wird unabhängig davon ausgeführt, ob eine Ausnahme aufgetreten ist oder nicht
    print('Finally block ausgeführt');
  }
}

Spezifische Ausnahmetypen abfangen

dart
void main() {
  try {
    int ergebnis = int.parse('abc');
  } on FormatException catch (e) {
    print('Formatfehler: ' + e.message);
  } on Exception catch (e) {
    print('Ausnahme: ' + e.toString());
  } catch (e) {
    print('Unbekannter Fehler: ' + e.toString());
  }
}

12.4 Benutzerdefinierte Ausnahmen

dart
// Benutzerdefinierte Ausnahme
class AlterAusnahme implements Exception {
  String fehlermeldung() {
    return 'Ungültiges Alter';
  }
}

void überprüfeAlter(int alter) {
  if (alter < 0 || alter > 150) {
    throw AlterAusnahme();
  }
}

void main() {
  try {
    überprüfeAlter(200);
  } on AlterAusnahme catch (e) {
    print(e.fehlermeldung());
  }
}

12.5 Praxisbeispiel

dart
// Programmabsturz vermeiden durch Ausnahmeabfang
Future<void> datenHolen() async {
  try {
    // Simuliere Netzwerkanfrage
    await Future.delayed(Duration(seconds: 1));
    throw 'Netzwerkfehler';
  } catch (e) {
    print('Fehler beim Abrufen der Daten: ' + e.toString());
    // Zeige Fehlermeldung an
  } finally {
    print('Datenabruf abgeschlossen');
  }
}

void main() {
  datenHolen();
  print('Andere Aufgaben werden ausgeführt...');
}

Frei für alle Anfänger