Mise en œuvre de la gestion des exceptions

publicitemcppreparation

 

Présentation des exceptions.

Quel que soit notre rôle (concepteur, développeur, leader technique, chef de projet technique,..) dans un projet de développement d’applications informatiques, la finalité est de livrer un produit de haute qualité qui répond aux exigences métiers formulées et validées par le client.

La stabilité de l’application est un axe très important.

Imaginez-vous en train de rédiger un devis sur un logiciel, et tout d’un coup il se ferme sans même afficher un message. Quelle serait votre réaction ?

L’origine de cette instabilité peut-être : la non prise en charge d’une exception générée par l’application.

Prenons par exemple le code ci-dessous :

            String MonText = « Gestion d’erreurs »;

            int i = int.Parse(MonText);

A l’exécution, il génère une exception de type FormatException.

Le langage C# permet de gérer les exceptions en utilisant les mots les blocs : try/catch.

Lorsqu’un code peut engendrer une ou des exceptions il faut le placer dans le bloc try.

C’est un message qui veut dire « exécute moi toutes ces instructions mais fait attention il risque d’avoir une erreur durant le traitement de celles-ci ».

Le bloc catch permet de récupérer le ou les erreurs renvoyées par le bloc try.

Il possède un paramètre Exception. C’est un objet qui contient toutes les informations de l’exception retournée.

Exemple de notre code:

  try

            {

                String MonText = « Gestion d’erreurs »;

                int i = int.Parse(MonText);

            }

            catch (Exception)

            {

            }

En tant que développeur, il est important de savoir quels seront les types d’erreurs renvoyées par le bloc try, et, également faire réagir l’application différemment en fonction du type d’erreur retourné.

Pour notre cas, le type d’erreur renvoyé est une FormatException. Une erreur due au format.

C’est normal, je demande au programme de parser une variable de type String en Int J

Supposons que je veuille que le programme affiche un message particulier lorsqu’à l’exécution du code, j’ai une erreur causée par le format de la valeur à parser.

Mon code deviendrait donc ainsi :

  try

            {

                String MonText = « Gestion d’erreurs »;

                int i = int.Parse(MonText);

            }

            catch (FormatException)

            {

                Console.WriteLine(« Impossible de parser une variable de type String en Int »);   

            }

L’une des puissances du bloc catch c’est que nous pouvons gérer plusieurs types d’erreurs différents par exemple :

            try

            {

                String MonText = « Gestion d’erreurs »;

                int i = int.Parse(MonText);

            }

            catch (FormatException)

            {

                Console.WriteLine(« Impossible de parser une variable de type String en Int »);

            }

            catch(ArgumentNullException)

            {

             // Mettre le code souhaité

            }

Dans ce cas, la gestion des blocs catch se fait de haut en bas. D’où la nécessité de les ordonner par importance.

Il arrive parfois d’exécuter un bout de code même si une erreur est produite. Dans ce cas, il faut faire appel au bloc finally.

Le bloc finally, se situe après le bloc catch. Par exemple :

            try

            {

                String MonText = « Gestion d’erreurs »;

                int i = int.Parse(MonText);

            }

            catch (FormatException)

            {

                Console.WriteLine(« Impossible de parser une variable de type String en Int »);

            }

            catch(ArgumentNullException)

            {

            }

            finally

            {

                Console.WriteLine(« Enfin terminée ! »);

            }

Important à savoir : Un bloc try doit toujours être suivi d’un bloc catch ou finally.

Levée une exception

Les objets Exception renvoyés lors de la génération d’une exception peuvent également être levés en utilisant le mot clé throw.

Pour ce faire, il faut créer une nouvelle instance d’exception.

Par exemple :

            try

            {

                String MonText = « Gestion d’erreurs »;

                int i = int.Parse(MonText);

            }

            catch (FormatException ex)

            {

                throw new FormatException(ex.Message);

            }

           finally

            {

                Console.WriteLine(« Enfin terminée ! »);

            }

Publicités