Intercepter des exceptions avec 'on'
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 40 sur 65.
Alors que le bloc try-catch de base capture n'importe quelle exception qui survient, vous avez parfois besoin de gérer différents types d'exceptions de différentes manières. Le mot-clé on vous permet de capturer des types d'exceptions spécifiques et de fournir des réponses adaptées pour chacun.
Au lieu de capturer toutes les exceptions avec un catch générique, vous pouvez cibler des exceptions spécifiques en utilisant on suivi du type d'exception. Cela vous donne plus de contrôle sur la façon dont votre programme répond à différentes situations d'erreur.
try {
int number = int.parse("abc");
} on FormatException {
print("Please enter a valid number");
}Dans cet exemple, le code intercepte spécifiquement une FormatException, qui se produit lors de la tentative d'analyse d'un texte invalide en tant que nombre. Cela vous permet de fournir un message clair et convivial qui traite directement le problème, plutôt que d'afficher un message d'erreur générique qui pourrait dérouter les utilisateurs.
Vous pouvez également combiner plusieurs blocs on pour gérer différents types d'exceptions avec des réponses appropriées, rendant votre gestion des erreurs à la fois précise et conviviale.
Défi
FacileCréez un programme qui démontre la capture d'exceptions spécifiques en utilisant le mot-clé on. Votre programme traitera différents types d'entrées utilisateur et gérera des types d'exceptions spécifiques avec des messages d'erreur personnalisés.
- Lisez une entrée de type chaîne représentant un type d'expression mathématique (
"parse","divide", ou"access") - Lisez une entrée de type chaîne représentant la première valeur
- Lisez une entrée de type chaîne représentant la deuxième valeur (le cas échéant)
- En fonction du type d'expression, effectuez l'opération correspondante en utilisant une gestion d'exception spécifique :
- Pour
"parse": Convertissez la première valeur en un entier en utilisantint.parse()et capturez spécifiquementFormatException - Pour
"divide": Analysez les deux valeurs comme des entiers et effectuez la division, en capturantFormatExceptionpour les erreurs d'analyse - Pour
"access": Créez une liste avec la première valeur et accédez à l'index spécifié par la deuxième valeur, en capturantRangeErrorpour les index invalides - Affichez les résultats ou les messages d'erreur spécifiques dans le format exact indiqué ci-dessous
Par exemple, si les entrées sont "parse", "42", "unused", votre programme devrait afficher :
Operation: parse
Input: 42
Parsing successful!
Result: 42Si les entrées sont "parse", "xyz", "unused", votre programme devrait afficher :
Operation: parse
Input: xyz
FormatException caught: Invalid number format
Please provide a valid integerSi les entrées sont "divide", "10", "2", votre programme devrait afficher :
Operation: divide
Values: 10, 2
Division successful!
Result: 5Si les entrées sont "divide", "10", "abc", votre programme devrait afficher :
Operation: divide
Values: 10, abc
FormatException caught: Invalid number format
Cannot perform division with invalid numbersSi les entrées sont "access", "hello", "1", votre programme devrait afficher :
Operation: access
List: [hello]
Index: 1
RangeError caught: Index out of range
Valid indices are 0 to 0Votre programme doit utiliser des blocs try-catch séparés avec le mot-clé on pour capturer spécifiquement FormatException et RangeError. Chaque type d'exception doit avoir son propre message d'erreur personnalisé qui explique clairement ce qui s'est mal passé. Pour l'opération "access", créez une liste contenant uniquement la première valeur d'entrée et tentez d'accéder à l'index spécifié par la deuxième valeur d'entrée.
Aide-mémoire
Utilisez le mot-clé on pour intercepter des types d'exceptions spécifiques au lieu d'utiliser un bloc catch générique :
try {
int number = int.parse("abc");
} on FormatException {
print("Please enter a valid number");
}Vous pouvez combiner plusieurs blocs on pour gérer différents types d'exceptions avec des réponses appropriées :
try {
// du code qui pourrait lever différentes exceptions
} on FormatException {
print("Invalid format error");
} on RangeError {
print("Index out of range error");
}Cette approche offre plus de contrôle sur la gestion des erreurs en permettant des réponses adaptées à chaque type d'exception spécifique.
Essayez vous-même
import 'dart:io';
void main() {
// Lire l'entrée
String? operation = stdin.readLineSync();
String? firstValue = stdin.readLineSync();
String? secondValue = stdin.readLineSync();
// Afficher les informations sur l'opération
print('Operation: $operation');
// TODO: Écrivez votre code ci-dessous
// Utilisez des blocs try-catch avec le mot-clé 'on' pour gérer des exceptions spécifiques
// Gérer FormatException pour les opérations d'analyse (parse) et de division
// Gérer RangeError pour l'opération d'accès (access)
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques6Gestion de base des erreurs
Que sont les exceptions ?Le bloc 'try-catch'Intercepter des exceptions avec 'on'Le bloc 'finally'Lever une exceptionRécapitulatif - Division sécurisée