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.
Aufgabe
EinfachErstelle 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.
- Lies eine Zeichenfolgeneingabe ein, die einen mathematischen Ausdruckstyp darstellt (
"parse","divide"oder"access"). - Lies eine Zeichenfolgeneingabe ein, die den ersten Wert darstellt.
- Lies eine Zeichenfolgeneingabe ein, die den zweiten Wert darstellt (falls zutreffend).
- Führe abhängig vom Ausdruckstyp die entsprechende Operation mit spezifischer Ausnahmebehandlung aus:
- Für
"parse": Wandle den ersten Wert mithilfe vonint.parse()in eine Ganzzahl um und fange speziellFormatExceptionab. - Für
"divide": Parse beide Werte als Ganzzahlen und führe die Division durch; fange bei Parsing-FehlernFormatExceptionab. - 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 IndizesRangeErrorab. - 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: 42Wenn die Eingaben "parse", "xyz", "unused" lauten, sollte dein Programm Folgendes ausgeben:
Operation: parse
Input: xyz
FormatException caught: Invalid number format
Please provide a valid integerWenn die Eingaben "divide", "10", "2" lauten, sollte dein Programm Folgendes ausgeben:
Operation: divide
Values: 10, 2
Division successful!
Result: 5Wenn 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 numbersWenn 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 0Dein 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
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste6Grundlagen der Fehlerbehandlung
Was sind Exceptions?Der 'try-catch'-BlockExceptions mit 'on' abfangenDer 'finally'-BlockEine Exception auslösenRückblick - Sichere DivisionÜbe selbstständig: Online-Dart-Compiler