Menu
Coddy logo textTech

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.

challenge icon

Défi

Facile

Cré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.

  1. Lisez une entrée de type chaîne représentant un type d'expression mathématique ("parse", "divide", ou "access")
  2. Lisez une entrée de type chaîne représentant la première valeur
  3. Lisez une entrée de type chaîne représentant la deuxième valeur (le cas échéant)
  4. 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 utilisant int.parse() et capturez spécifiquement FormatException
    • Pour "divide" : Analysez les deux valeurs comme des entiers et effectuez la division, en capturant FormatException pour 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 capturant RangeError pour les index invalides
  5. 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: 42

Si les entrées sont "parse", "xyz", "unused", votre programme devrait afficher :

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

Si les entrées sont "divide", "10", "2", votre programme devrait afficher :

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

Si 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 numbers

Si 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 0

Votre 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)
  
}
quiz iconTestez-vous

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