Programmation Dart - Exceptions

Une exception (ou événement exceptionnel) est un problème qui survient lors de l'exécution d'un programme. Lorsqu'une exception se produit, le déroulement normal du programme est interrompu et le programme / l'application se termine anormalement.

Les exceptions Dart intégrées incluent -

Sr.Non Exceptions et description
1

DeferredLoadException

Lancé lorsqu'une bibliothèque différée ne parvient pas à se charger.

2

FormatException

Exception levée lorsqu'une chaîne ou certaines autres données n'ont pas un format attendu et ne peuvent pas être analysées ou traitées.

3

IntegerDivisionByZeroException

Lancé lorsqu'un nombre est divisé par zéro.

4

IOException

Classe de base pour toutes les exceptions liées à Inupt-Output.

5

IsolateSpawnException

Lancé lorsqu'un isolat ne peut pas être créé.

6

Timeout

Lancé lorsqu'un délai d'expiration planifié se produit en attendant un résultat asynchrone.

Chaque exception dans Dart est un sous-type de la classe prédéfinie Exception. Les exceptions doivent être gérées pour empêcher l'application de se terminer brusquement.

Les blocs try / on / catch

le tryblock incorpore du code qui pourrait éventuellement entraîner une exception. Le bloc on est utilisé lorsque le type d'exception doit être spécifié. lecatch block est utilisé lorsque le gestionnaire a besoin de l'objet d'exception.

le try le bloc doit être suivi par soit exactement un on / catch bloc ou un finallybloc (ou l'un des deux). Lorsqu'une exception se produit dans le bloc try, le contrôle est transféré vers lecatch.

le syntax pour gérer une exception est comme indiqué ci-dessous -

try { 
   // code that might throw an exception 
}  
on Exception1 { 
   // code for handling exception 
}  
catch Exception2 { 
   // code for handling exception 
}

Voici quelques points à retenir -

  • Un extrait de code peut avoir plusieurs blocs on / catch pour gérer plusieurs exceptions.

  • Le bloc on et le bloc catch sont mutuellement inclusifs, c'est-à-dire qu'un bloc try peut être associé à la fois au bloc on et au bloc catch.

Le code suivant illustre la gestion des exceptions dans Dart -

Exemple: utilisation du bloc ON

Le programme suivant divise deux nombres représentés par les variables x et yrespectivement. Le code lève une exception car il tente une division par zéro. leon block contient le code pour gérer cette exception.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try {
      res = x ~/ y; 
   } 
   on IntegerDivisionByZeroException { 
      print('Cannot divide by zero'); 
   } 
}

Il devrait produire les éléments suivants output -

Cannot divide by zero

Exemple: utilisation du bloc catch

Dans l'exemple suivant, nous avons utilisé le même code que ci-dessus. La seule différence est que lecatch block(au lieu du bloc ON) contient ici le code pour gérer l'exception. Le paramètre decatch contient l'objet d'exception lancé lors de l'exécution.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try {  
      res = x ~/ y; 
   }  
   catch(e) { 
      print(e); 
   } 
}

Il devrait produire les éléments suivants output -

IntegerDivisionByZeroException

Exemple: sur… catch

L'exemple suivant montre comment utiliser le on...catch bloquer.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try { 
      res = x ~/ y; 
   }  
   on IntegerDivisionByZeroException catch(e) { 
      print(e); 
   } 
}

Il devrait produire les éléments suivants output -

IntegerDivisionByZeroException

Le bloc Final

le finallyblock inclut du code qui doit être exécuté indépendamment de l'occurrence d'une exception. L'optionfinally le bloc s'exécute sans condition après try/on/catch.

La syntaxe d'utilisation de finally bloc est comme suit -

try { 
   // code that might throw an exception 
}  
on Exception1 { 
   // exception handling code 
}  
catch Exception2 { 
   //  exception handling 
}  
finally { 
   // code that should always execute; irrespective of the exception 
}

L'exemple suivant illustre l'utilisation de finally bloquer.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try { 
      res = x ~/ y; 
   } 
   on IntegerDivisionByZeroException { 
      print('Cannot divide by zero'); 
   } 
   finally { 
      print('Finally block executed'); 
   } 
}

Il devrait produire les éléments suivants output -

Cannot divide by zero 
Finally block executed

Lancer une exception

le throwLe mot clé est utilisé pour déclencher explicitement une exception. Une exception levée doit être gérée pour empêcher le programme de se fermer brusquement.

le syntax pour lever une exception explicitement est -

throw new Exception_name()

Exemple

L'exemple suivant montre comment utiliser le throw mot-clé pour lancer une exception -

main() { 
   try { 
      test_age(-2); 
   } 
   catch(e) { 
      print('Age cannot be negative'); 
   } 
}  
void test_age(int age) { 
   if(age<0) { 
      throw new FormatException(); 
   } 
}

Il devrait produire les éléments suivants output -

Age cannot be negative

Exceptions personnalisées

Comme spécifié ci-dessus, chaque type d'exception dans Dart est un sous-type de la classe intégrée Exception. Dart permet de créer des exceptions personnalisées en étendant celles existantes. La syntaxe pour définir une exception personnalisée est la suivante:

Syntaxe: définition de l'exception

class Custom_exception_Name implements Exception { 
   // can contain constructors, variables and methods 
}

Les exceptions personnalisées doivent être déclenchées explicitement et la même chose doit être gérée dans le code.

Exemple

L'exemple suivant montre comment définir et gérer une exception personnalisée.

class AmtException implements Exception { 
   String errMsg() => 'Amount should be greater than zero'; 
}  
void main() { 
   try { 
      withdraw_amt(-1); 
   } 
   catch(e) { 
      print(e.errMsg()); 
   }  
   finally { 
      print('Ending requested operation.....'); 
   } 
}  
void withdraw_amt(int amt) { 
   if (amt <= 0) { 
      throw new AmtException(); 
   } 
}

Dans le code ci-dessus, nous définissons une exception personnalisée, AmtException. Le code lève l'exception si le montant passé n'est pas dans la plage exceptée. lemain function englobe l'invocation de la fonction dans le try...catch bloquer.

Le code doit produire les éléments suivants output -

Amount should be greater than zero 
Ending requested operation....