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

Erstelle ein Programm, das das Abfangen spezifischer Ausnahmen mit dem Schlüsselwort on demonstriert. Dein Programm verarbeitet verschiedene Arten von Benutzereingaben und behandelt bestimmte Ausnahmetypen mit passenden Fehlermeldungen.

  1. Lies eine Zeichenfolgeneingabe ein, die einen mathematischen Ausdruckstyp darstellt ("parse", "divide" oder "access").
  2. Lies eine Zeichenfolgeneingabe ein, die den ersten Wert darstellt.
  3. Lies eine Zeichenfolgeneingabe ein, die den zweiten Wert darstellt (falls zutreffend).
  4. Führe abhängig vom Ausdruckstyp die entsprechende Operation mit spezifischer Ausnahmebehandlung aus:
    • Für "parse": Wandle den ersten Wert mithilfe von int.parse() in eine Ganzzahl um und fange speziell FormatException ab.
    • Für "divide": Parse beide Werte als Ganzzahlen und führe die Division durch; fange bei Parsing-Fehlern FormatException ab.
    • Für "access": Erstelle eine Liste mit dem ersten Wert und greife auf den durch den zweiten Wert angegebenen Index zu; fange bei ungültigen Indizes RangeError ab.
  5. Gib die Ergebnisse oder spezifischen Fehlermeldungen exakt im unten gezeigten Format aus.

Wenn die Eingaben beispielsweise "parse", "42", "unused" lauten, sollte dein Programm Folgendes ausgeben:

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

Wenn die Eingaben "parse", "xyz", "unused" lauten, sollte dein Programm Folgendes ausgeben:

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

Wenn die Eingaben "divide", "10", "2" lauten, sollte dein Programm Folgendes ausgeben:

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

Wenn die Eingaben "divide", "10", "abc" lauten, sollte dein 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" lauten, sollte dein Programm Folgendes ausgeben:

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

Dein Programm muss separate try-catch-Blöcke mit dem Schlüsselwort on verwenden, um FormatException und RangeError speziell abzufangen. Jeder Ausnahmetyp sollte eine eigene, passende Fehlermeldung haben, die klar erklärt, was schiefgelaufen ist. Für die Operation "access" erstellst du eine Liste, die nur den ersten Eingabewert enthält, und versuchst, auf den durch den zweiten Eingabewert angegebenen Index zuzugreifen.

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

Übe selbstständig: Online-Dart-Compiler