
Principe :
L’erreur d’exécution est un problème qui survient au cours de l’exécution
d’un programme, les causes peuvent être nombreuses :
- instanciation d’une classe absente
- tentative d’écriture en base en lecture seule
- lecture d’un fichier absent
- erreur de syntaxe au codage …
En clair un bon vieux bogue… pour pallier à cela, nous utiliserons en asp.net (vb.net)
l’instruction Try…Catch…Finally…
La syntaxe est la suivante :
Try
‘ ici on met le code à exécuter risquant d’engendrer l’erreur
Catch … (Filtre facultatif, cfr
partie suivante)
‘ ici on place le code à exécuter si l’erreur se produit, attention, le bloc
catch peut contenir des filtres, s’il n’en possède pas ce code réagira à toute
erreur d’exécution ! Il faut aussi savoir que plusieurs blocs catch peuvent se
retrouver dans une instruction Try !
Finally
‘ code exécuter après que celui du bloc catch a été exécuté,
la partie "finally" est facultative !End
Try
Remarque : nous pouvons travailler avec des
instruction Try imbriquées afin de pallier aux erreurs de code dans
l'instruction !
Les filtres de types d'exceptions ... d'erreurs :Pour
obtenir des infos sur l'erreur, ou nous parlerons ici d'exception, nous
écrirons la syntaxe...
En fait l'ensemble des exceptions dérivent de la classe system.exception.
Ce filtre intercepte toutes les exceptions mais vous permet d'utiliser
l'expression "e" pour accéder aux infos sur l'exception en question!
Vous pouvez utiliser n'importe quelle variable à la place du "e", pour ma
part, je l'utilise toujours car il semble devenir un standard, on sait de quoi
on parle.
Nous pouvons utiliser un filtre afin d'activer les différentes
réponses aux différentes exceptions ! Ainsi un type de filtre sera basé
sur le type d'exception présente ! La syntaxe devient alors :
A partir de là, on fait un peu ce qu'on veut, on peut incorporer autant de
catch que désirer et donc envisager plusieurs possibilités, un catch pour une
exception particulière et un deuxième pour toutes les autres, ou un pour tous
les types d'erreurs, ou un pour chaque erreur .... ;) courage ... Dans
le cas d'utilisation de plusieurs blocs catch, je vous conseille de travailler
du plus particulier vers le plus global, vous aurez compris qu'un plus global
interceptera plus rapidement les exceptions qui auraient dus l'être dans un
plus spécifique.
Exemple, un peu de code maintenant :
Prenons le cas suivant, nous utilisons un fichier se trouvant sur
le serveur et nous désirons prévoir le cas ou le fichier n'existe pas où
si pose problème à son ouverture ...
Private Sub fichier_exist() Dim chemin As String = "/repertoire/" Dim fichier As String = "monfichier.txt" 'peut être en dynamique, avec un request...
Dim sFilename As String sFilename = Server.MapPath(chemin & fichier) Dim oFileread As System.IO.StreamReader
Try ' on vient lire le fichier oFileread = New System.IO.StreamReader(sFilename) ' on le split dans une table Dim trad() As String = Split(oFileread.ReadToEnd, vbCrLf, -1, 1) ' on referme le fichier oFileread.Close() Catch e As System.IO.FileNotFoundException ' on affiche l'erreur si le fichier n'existe pas Response.Write("Le fichier " & fichier & " n'existe pas !") Catch e As System.IO.FileLoadException ' on affiche l'erreur si le fichier pose une exception à son chargement Response.Write("erreur au chargement du fichier " & fichier & e.Message) End Try
End Sub
|