Menu
Coddy logo textTech

Exceptions mit 'on' abfangen

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 40 von 65.

Während der grundlegende try-catch-Block jede auftretende Exception abfängt, müssen Sie manchmal verschiedene Arten von Exceptions auf unterschiedliche Weise behandeln. Das Schlüsselwort on ermöglicht es Ihnen, spezifische Exception-Typen abzufangen und für jeden maßgeschneiderte Reaktionen bereitzustellen.

Anstatt alle Ausnahmen mit einem generischen catch abzufangen, können Sie gezielt bestimmte Ausnahmen mit on gefolgt vom Ausnahmetyp ansprechen. Dies gibt Ihnen mehr Kontrolle darüber, wie Ihr Programm auf verschiedene Fehlersituationen reagiert.

try {
  int number = int.parse("abc");
} on FormatException {
  print("Please enter a valid number");
}

In diesem Beispiel fängt der Code gezielt eine FormatException ab, die auftritt, wenn versucht wird, ungültigen Text als Zahl zu parsen. Dies ermöglicht es Ihnen, eine klare, benutzerfreundliche Nachricht bereitzustellen, die das Problem direkt anspricht, anstatt eine generische Fehlermeldung anzuzeigen, die Benutzer verwirren könnte.

Sie können auch mehrere on-Blöcke kombinieren, um verschiedene Ausnahmetypen mit angemessenen Antworten zu behandeln, wodurch Ihre Fehlerbehandlung sowohl präzise als auch benutzerfreundlich wird.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das das Abfangen spezifischer Ausnahmen mit dem Schlüsselwort on demonstriert. Ihr Programm wird verschiedene Arten von Benutzereingaben verarbeiten und spezifische Ausnahmetypen mit maßgeschneiderten Fehlermeldungen behandeln.

  1. Lesen Sie eine String-Eingabe ein, die einen mathematischen Ausdruckstyp darstellt ("parse", "divide" oder "access")
  2. Lesen Sie eine String-Eingabe ein, die den ersten Wert darstellt
  3. Lesen Sie eine String-Eingabe ein, die den zweiten Wert darstellt (falls zutreffend)
  4. Führen Sie basierend auf dem Ausdruckstyp die entsprechende Operation unter Verwendung spezifischer Ausnahmebehandlung aus:
    • Für "parse": Konvertieren Sie den ersten Wert mit int.parse() in eine Ganzzahl und fangen Sie gezielt die FormatException ab
    • Für "divide": Parsen Sie beide Werte als Ganzzahlen und führen Sie eine Division durch, wobei Sie die FormatException für Parsing-Fehler abfangen
    • Für "access": Erstellen Sie eine Liste mit dem ersten Wert und greifen Sie auf den durch den zweiten Wert angegebenen Index zu, wobei Sie RangeError für ungültige Indizes abfangen
  5. Zeigen Sie die Ergebnisse oder spezifischen Fehlermeldungen in dem unten gezeigten exakten Format an

Wenn die Eingaben beispielsweise "parse", "42", "unused" sind, sollte Ihr Programm Folgendes ausgeben:

Operation: parse
Input: 42
Parsing successful!
Result: 42

Wenn die Eingaben "parse", "xyz", "unused" sind, sollte Ihr Programm Folgendes ausgeben:

Operation: parse
Input: xyz
FormatException caught: Invalid number format
Please provide a valid integer

Wenn die Eingaben "divide", "10", "2" sind, sollte Ihr Programm Folgendes ausgeben:

Operation: divide
Values: 10, 2
Division successful!
Result: 5

Wenn die Eingaben "divide", "10", "abc" sind, sollte Ihr Programm Folgendes ausgeben:

Operation: divide
Values: 10, abc
FormatException caught: Invalid number format
Cannot perform division with invalid numbers

Wenn die Eingaben "access", "hello", "1" sind, sollte Ihr Programm Folgendes ausgeben:

Operation: access
List: [hello]
Index: 1
RangeError caught: Index out of range
Valid indices are 0 to 0

Ihr Programm muss separate try-catch-Blöcke mit dem Schlüsselwort on verwenden, um FormatException und RangeError gezielt abzufangen. Jeder Ausnahmetyp sollte eine eigene, maßgeschneiderte Fehlermeldung haben, die klar erklärt, was schiefgelaufen ist. Erstellen Sie für die Operation "access" eine Liste, die nur den ersten Eingabewert enthält, und versuchen Sie, auf den durch den zweiten Eingabewert angegebenen Index zuzugreifen.

Spickzettel

Verwenden Sie das Schlüsselwort on, um spezifische Ausnahmetypen abzufangen, anstatt einen generischen catch-Block zu verwenden:

try {
  int number = int.parse("abc");
} on FormatException {
  print("Please enter a valid number");
}

Sie können mehrere on-Blöcke kombinieren, um verschiedene Ausnahmetypen mit entsprechenden Reaktionen zu behandeln:

try {
  // Code, der verschiedene Ausnahmen auslösen könnte
} on FormatException {
  print("Invalid format error");
} on RangeError {
  print("Index out of range error");
}

Dieser Ansatz bietet mehr Kontrolle über die Fehlerbehandlung, indem er maßgeschneiderte Reaktionen für jeden spezifischen Ausnahmetyp ermöglicht.

Probier es selbst

import 'dart:io';

void main() {
  // Eingabe lesen
  String? operation = stdin.readLineSync();
  String? firstValue = stdin.readLineSync();
  String? secondValue = stdin.readLineSync();
  
  // Operationsinformationen anzeigen
  print('Operation: $operation');
  
  // TODO: Schreiben Sie Ihren Code unten
  // Verwenden Sie try-catch-Blöcke mit dem Schlüsselwort 'on', um spezifische Ausnahmen zu behandeln
  // Behandeln Sie FormatException für Parse- und Divisionsoperationen
  // Behandeln Sie RangeError für Zugriffsoperationen
  
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf