Gestire le eccezioni con 'on'
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 40 di 65.
Sebbene il blocco try-catch di base intercetti qualsiasi eccezione si verifichi, a volte è necessario gestire diversi tipi di eccezioni in modi diversi. La parola chiave on consente di intercettare tipi specifici di eccezioni e fornire risposte su misura per ciascuno.
Invece di intercettare tutte le eccezioni con un catch generico, puoi scegliere eccezioni specifiche usando on seguito dal tipo di eccezione. Questo ti dà un maggiore controllo su come il tuo programma risponde a diverse situazioni di errore.
try {
int number = int.parse("abc");
} on FormatException {
print("Please enter a valid number");
}In questo esempio, il codice intercetta specificamente una FormatException, che si verifica quando si tenta di analizzare del testo non valido come numero. Questo ti consente di fornire un messaggio chiaro e comprensibile per l’utente che affronta direttamente il problema, invece di mostrare un messaggio di errore generico che potrebbe confondere gli utenti.
Puoi anche combinare più blocchi on per gestire diversi tipi di eccezioni con risposte appropriate, rendendo la gestione degli errori precisa e intuitiva.
Sfida
FacileCrea un programma che mostri come intercettare eccezioni specifiche usando la parola chiave on. Il programma elaborerà diversi tipi di input dell’utente e gestirà tipi specifici di eccezioni con messaggi di errore personalizzati.
- Leggi una stringa di input che rappresenta il tipo di espressione matematica (
"parse","divide"o"access") - Leggi una stringa di input che rappresenta il primo valore
- Leggi una stringa di input che rappresenta il secondo valore (se applicabile)
- In base al tipo di espressione, esegui l’operazione corrispondente usando la gestione specifica delle eccezioni:
- Per
"parse": converti il primo valore in un intero usandoint.parse()e intercetta specificamenteFormatException - Per
"divide": analizza entrambi i valori come interi ed esegui la divisione, intercettandoFormatExceptionin caso di errori di analisi - Per
"access": crea una lista con il primo valore e accedi all’indice specificato dal secondo valore, intercettandoRangeErrorin caso di indici non validi - Visualizza i risultati o i messaggi di errore specifici nel formato esatto mostrato di seguito
Ad esempio, se gli input sono "parse", "42", "unused", il programma dovrebbe produrre:
Operation: parse
Input: 42
Parsing successful!
Result: 42Se gli input sono "parse", "xyz", "unused", il programma dovrebbe produrre:
Operation: parse
Input: xyz
FormatException caught: Invalid number format
Please provide a valid integerSe gli input sono "divide", "10", "2", il programma dovrebbe produrre:
Operation: divide
Values: 10, 2
Division successful!
Result: 5Se gli input sono "divide", "10", "abc", il programma dovrebbe produrre:
Operation: divide
Values: 10, abc
FormatException caught: Invalid number format
Cannot perform division with invalid numbersSe gli input sono "access", "hello", "1", il programma dovrebbe produrre:
Operation: access
List: [hello]
Index: 1
RangeError caught: Index out of range
Valid indices are 0 to 0Il programma deve usare blocchi try-catch separati con la parola chiave on per intercettare specificamente FormatException e RangeError. Ogni tipo di eccezione deve avere un messaggio di errore personalizzato che spieghi chiaramente cosa è andato storto. Per l’operazione "access", crea una lista contenente solo il primo valore di input e prova ad accedere all’indice specificato dal secondo valore di input.
Provalo tu
import 'dart:io';
void main() {
// Leggi l'input
String? operation = stdin.readLineSync();
String? firstValue = stdin.readLineSync();
String? secondValue = stdin.readLineSync();
// Mostra le informazioni sull'operazione
print('Operation: $operation');
// TODO: Scrivi il tuo codice qui sotto
// Usa blocchi try-catch con la parola chiave 'on' per gestire eccezioni specifiche
// Gestisci FormatException per le operazioni parse e divide
// Gestisci RangeError per l'operazione access
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti unici6Gestione di base degli errori
Cosa sono le eccezioni?Il blocco 'try-catch'Gestire le eccezioni con 'on'Il blocco 'finally'Lanciare un'eccezioneRiepilogo - Divisione sicuraEsercitati da solo: Compilatore Dart online