Aller au menu - Aller au contenu

Icône Gérer les erreurs

Avatar
Mise à jour : 13/12/2010
Difficulté : Facile Facile Creative Commons BY-NC-SA
23 410 visites depuis 7 jours, dont 198 sur ce chapitre classé 14/786
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Pourquoi ?

Toi zéro, ou alors toi, développeur expérimenté, tu as déjà lancé un programme qui a provoqué une erreur !

Oui je le sais ! C'est obligé !
Image utilisateur

Bon, trêves de plaisanteries, les erreurs, c'est parfois bien : ça aide à progresser.

Votre superbe IDE : Visual Basic Express 2010, ou Visual Studio faute de ; permet facilement de retrouver et de gérer les erreur. Il indique la ligne ayant provoqué l'erreur, l'erreur expliquée (en Français) et des fois comment la résoudre.

Mais pour ce qui est des autres erreurs ? Les erreurs qui ne sont pas liées à notre programme.

Image utilisateur

Ras la bol de faire 50 if pour vérifier si la base de données à laquelle on veut accéder est bien là, voir si la table est bien présent, voir si la requête a bien fonctionné etc ...

Nous allons donc utiliser un autre point de vue pour gérer ces passages : la gestion d'erreur.

Vous allez découvrir le ... Try !

Découvrons le Try

Le try c'est quoi ? Ça se mange ?

Bon pour vous expliquer simplement : le mot try est le mot anglais pour essayer.

Le programme va donc essayer les lignes de code que vous définirez, si une erreur se présente dedans, il va automatiquement dans une partie de votre programme, et l'erreur ne vous saute pas aux yeux comme si vous veniez de tuer quelqu'un

Syntaxe :
Code : VB.NET
1
2
3
Try
    'Code à exécuter
End Try

Donc, ce code exécutera ce qu'il y a entre le try et son end try, si une erreur se produit il sort du try.

Pour le moment pas compliqué donc.

Gros malin, ça m'avance pas ! Une erreur et je me retrouve à la fin de mon programme direct !

D'où l'intérêt d'utiliser ce try dans chaque fonctions ! A chaque début de fonction vous mettez votre try et à la fin votre end try !

Si la fonction échoue, elle sera ignorée c'est tout !

Et alors ? Une fois de retour ou la fonction a été appelée si je n'ai pas de valeurs ça va également planter !


Mmmmmh c'est pas faux tout ça, passons alors au finally

Finally

Dans le try nous avons d'autres instruction pour nous aider : Tout d'abord le finally.

Je vous ai dit que si une erreur se produisait dans le try, il sautait tout. Oui mais dans une fonction ça va faire quoi ? Si il saute tout même le retour de la fonction ?

Code : VB.NET
1
2
3
4
5
6
7
Function Erreur() as integer
    Try
       'Code pas très sûr
    Finally
       Return 0
    End Try
End Function


Et voilà la solution : si une erreur se produit, paf il saute dans le finally et il retourne une valeur quoi qu'il arrive (même si aucune erreur n'est à déclarer) !

Donc si vous avez suivis depuis le début, vous mettez un return d'office dans le finally et un return dans le déroulement normal de la fonction. Si aucune erreur n'est a déplorer, le return de votre fonction aura la priorité et rendra l'autre inopérant.

Si c'est une demande de connections à un site web, que le site en question ne trouve pas la base de données, on aura une erreur mais l'utilisateur sera bloqué ... Que faire ?

On va les renvoyer.

Catch, throw

Notre salut : le catch !

Se place comme le finally entre le try et son end try, mais avant le finally

Le catch va nous permettre de récupérer l'erreur dans une variable de type exception.

Code : VB.NET
1
Catch ex As Exception

Que j'appelle ici "ex".

Ensuite je peux récupérer cette variable et m'en servir pour afficher l'erreur par exemple :

Code : VB.NET
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Private Sub BT_ENVOI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ENVOI.Click
        'On essaie
        Try

        Dim MonTxt As Integer

        MonTxt = Me.TXT_IN.Text
            Me.LBL_OUT.Text = MonTxt

            'Si erreur, on l'affiche
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub


Je l'affiche donc dans une MsgBox.
Voici le résultat :

Image utilisateur


Vous allez me dire que l'utilisateur lambda n'en a rien à faire de notre message d'erreur que lui il veut que ca marche !

Mais l'affichage n'est pas forcément nécessaire : on peut récupérer cette variable, l'écrire dans un fichier log, les possibilités sont multiples ou alors on la renvoie.

Pardon ?

Oui on la renvoie à l'étage du dessus : si c'est dans une fonction que l'erreur se produit ;

Code : VB.NET
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub BT_ENVOI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ENVOI.Click
        Try
            Bouton()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub Bouton()
        'On essaie
        Try

            Dim MonTxt As Integer

            MonTxt = Me.TXT_IN.Text
            Me.LBL_OUT.Text = MonTxt

            'Si erreur, on la renvoie à la fonction qui l'a appelée
        Catch ex As Exception
            Throw ex
        End Try
    End Sub


Donc, ici, j'envoie à l'instance du dessus l'erreur, une fois de retour dans cette fonction, le programme voit qu'une erreur s'est produite en amont, elle rentre elle-même dans son catch.

Inutile me diriez-vous ? Pas forcément, pourquoi ne pas utiliser ce try, catch avec son throw dans tout vos accès aux bases de données et ne pas utiliser un try catch avec une gestion spécifique d'erreur dans la fonction qui les appelles toutes ?

Une seule gestion d'erreur pour vérifier des dizaines de requêtes, ce n'est pas magnifique :) !
Chapitre précédent Sommaire Chapitre suivant

Partager

4 commentaires pour "Gérer les erreurs"
Note moyenne : 3.60 / 4 (543 votes)
Pseudo Commentaire
Hors ligne demonixis # Posté le 23/07/2009 à 17:17:30
Avatar

Avis : Mitigé
Flux RSS

Ville : Lyon
Pays : France métropolitaine

Tu aurais pu prendre le cas typique de la division par zéro pour illustrer l'utilité des bloques try catch...



 
Hors ligne biboo1 # Posté le 19/08/2010 à 17:12:43
Avatar

Avis : Très bon

Merci beaucoup pour ce tutos ;)

Secret (cliquez pour afficher)
19/20....Parce'que rien n'est parfait

Image utilisateur

 
Hors ligne Meriem2331 # Posté le 07/10/2010 à 15:31:26
Avatar

Bonjourje vous remercie pour ce super tuto mais j aimerai savoir comment reccuperer une exception sans passer par try et catch
Hors ligne polmiki # Posté le 22/01/2011 à 17:21:23

Très bon Tuto !

Citation

les erreur, c'est parfois bien : ça aide à progresser.


Voilà Pourquoi tu fais beaucoup d'erreurs sur les fautes d'orthographes !
C'est pour mieux progresser :D

D'ailleurs ici il y a une grosse erreur sur le mot "Erreur" Il prend un "S" à la fin! ;)

Sur ce bonne continuation !

Voir tous les commentaires