Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

COMMENT FAIRE : Intercepter des exceptions dans Visual Basic .NET

Ancien nº de publication de cet article : F301283
Résumé
L'interception et le traitement des exceptions sont des tâches de programmation standard. Cet article explique comment utiliser un bloc try-catch-finally pour intercepter une exception. Un bloc try-catch-finally est un " wrapper " que vous pouvez placer autour de tout code où peut se produire une exception.

Un bloc try-catch-finally se compose des sections suivantes :
  • Tout code susceptible de lever une exception est placé dans le bloc try.
  • Si une exception est levée, le bloc catch est activé et le programme peut effectuer l'opération appropriée pour une récupération ou alerter l'utilisateur.
  • Le code se trouvant dans le bloc finally est toujours exécuté et permet d'effectuer un nettoyage après qu'une exception a eu lieu. Le bloc finally est facultatif.
Retour au début

Configuration requise

La liste suivante indique le matériel, les logiciels, l'infrastructure réseau recommandés et les Service Packs dont vous avez besoin :

  • Microsoft Windows 2000 Professionnel, Windows 2000 Server, Windows 2000 Advanced Server ou Windows NT 4.0 Server
  • Microsoft Visual Basic .NET
Retour au début

Procédure pour intercepter des exceptions dans Visual Basic .NET

  1. Créez une nouvelle application console dans Visual Basic .NET.
  2. Dans la procédure Sub Main(), insérez l'exemple de code indiqué ci-dessous. Dans cet exemple, trois variables sont déclarées et initialisées, et l'initialisation de " k " provoque une erreur :
    ' Ce code génère une exception.      Console.WriteLine("Tentons de diviser 10 par 0 et voyons ce qui se produit...")      Console.WriteLine()      Dim i as Integer = 10      Dim j as Integer = 0      Dim k As Integer = i/j ' Erreur sur cette ligne.
  3. Appuyez sur F5 pour afficher l'exception.
  4. Insérez une instruction try-catch autour de votre code pour capturer l'erreur. Le code suivant intercepte toutes les erreurs levées dans le code et affiche un message d'erreur générique. Remplacez le code figurant dans la procédure Sub Main() par le code suivant :
    ' Ce code montre comment intercepter une exception.Try      Console.WriteLine("Tentons de diviser 10 par 0 et voyons ce qui se produit...")      Console.WriteLine()      Dim i as Integer = 10      Dim j as Integer = 0      Dim k As Integer = i/j ' Erreur sur cette ligne. Le contrôle passe au bloc catch.Catch      Console.WriteLine("Une erreur s'est produite.")End Try
  5. Appuyez sur CTRL+F5 pour exécuter le projet. Notez que le message d'erreur issu du bloc catch est affiché.
  6. Si des opérations de nettoyage ou de post-traitement doivent être effectuées, indépendamment d'une erreur, utilisez la partie finally de l'instruction try-catch-finally. Le code figurant dans la partie finally de l'instruction est toujours exécuté, qu'une exception soit levée ou non. Le code suivant affiche le message " Cette instruction est toujours imprimée " sur la console, même si aucune erreur ne s'est produite. Remplacez le code Sub Main() par le code suivant :
    ' Ce code montre comment intercepter une exception.Try      Console.WriteLine("Tentons de diviser 10 par 0 et voyons ce qui se produit...")      Console.WriteLine()      Dim i as Integer = 10      Dim j as Integer = 0      Dim k As Integer = i/j ' Erreur sur cette ligne. Le contrôle passe au bloc catch.Catch      Console.WriteLine("Une erreur s'est produite.")Finally   ' Cette section est exécutée, indépendamment du traitement ci-dessus.      Console.WriteLine()      Console.WriteLine("Cette instruction est toujours imprimée")End Try
  7. Appuyez sur CTRL+F5 pour exécuter le projet.
  8. Vous pouvez utiliser l'objet exception avec l'instruction catch pour récupérer des détails sur l'exception. Une exception possède un certain nombre de propriétés pouvant vous permettre d'identifier les informations d'aide, de source ou même de pile concernant cette exception. Ces informations peuvent s'avérer très utiles pour rechercher la cause à l'origine de l'exception ou fournir une meilleure explication sur sa source. L'exemple suivant intercepte une exception et affiche un message d'erreur spécifique. Comme précédemment, vous pouvez remplacer le code de la procédure Sub Main() par le code suivant :Exemple 1
    ' Ce code montre comment intercepter une exception.Try      Console.WriteLine("Tentons de diviser 10 par 0 et voyons ce qui se produit...")      Console.WriteLine()      Dim i as Integer = 10      Dim j as Integer = 0      Dim k As Integer = i/j ' Erreur sur cette ligne. Le contrôle passe au bloc catch.Catch ex As Exception  ' Exécute le code qui traite l'exception                      ' ou informe l'utilisateur de ce qui s'est produit.      Console.WriteLine("L'erreur suivante s'est produite :")      Console.WriteLine(ex.ToString())  ' Affiche le message d'erreur à l'utilisateur.Finally   ' Cette section est exécutée, indépendamment du traitement ci-dessus.      Console.WriteLine()      Console.WriteLine("Cette instruction est toujours imprimée")End Try
    Exemple 2 :
    ' Ce code montre comment intercepter une exception.Try      Console.WriteLine("Tentons de diviser 10 par 0 et voyons ce qui se produit...")      Console.WriteLine()      Dim i as Integer = 10      Dim j as Integer = 0      Dim k As Integer = i/j ' Erreur sur cette ligne. Le contrôle passe au bloc catch.Catch ex As Exception  ' Exécute le code qui traite l'exception                      ' ou informe l'utilisateur de ce qui s'est produit.        Console.WriteLine("L'erreur suivante s'est produite :")        Console.WriteLine( ex.Message )     ' Imprime le message d'erreur.        Console.WriteLine( ex.Source )      ' Nom de l'application ou de l'objet                                           ' à l'origine de l'erreur        Console.WriteLine( ex.StackTrace )  ' Chaîne qui contient la trace                                            ' de la pile pour cette exceptionFinally   ' Cette section est exécutée, indépendamment du traitement ci-dessus.        Console.WriteLine()        Console.WriteLine("Cette instruction est toujours imprimée")End Try
  9. Jusqu'à ce stade, vous avez traité le cas particulier d'une exception non spécifique. Toutefois, si vous connaissez à l'avance le type d'exception qui sera levée, vous pouvez intercepter l'exception anticipée et la traiter en conséquence. Vous pouvez ensuite intercepter toutes les autres exceptions et les traiter à leur tour. L'exemple suivant illustre cela :
    ' Nous allons tenter de traiter certains fichiers.' Cela peut provoquer un certain nombre d'exceptions potentielles.' Notez que vous pouvez utiliser les exceptions spécifiques pour ' obtenir des informations supplémentaires sur une exception,' mais cet exemple a pour objectif de montrer l'exécution du contrôle pour ces exceptions.' Ajouter Imports System.IO en haut de votre codeTry      File.Create("c:/temp/test.txt")  ' Peut échouer pour différentes raisonsCatch ioe As System.IO.IOException ' Cette erreur peut se produire si le dossier Temp n'existe pas.      Console.WriteLine("Une erreur E/S s'est produite. Le dossier c:\temp n'existe pas")Catch se As System.Security.SecurityException ' Vous ne possédez pas l'autorisation appropriée                                              ' pour réaliser cette action.      Console.WriteLine("Vous ne possédez pas les autorisations de sécurité permettant d'effectuer cette opération !")Catch ex As Exception    ' Intercepte toutes les autres exceptions.      Console.WriteLine( e.ToString() )  ' Imprime les informations standard sur l'exception.End Try
    Les configurations des ordinateurs pouvant être différentes, l'exemple fourni dans cette procédure peut ou non lever une exception. Pour provoquer de force une exception E/S, modifiez le chemin d'accès au fichier en spécifiant un dossier qui n'existe pas sur votre ordinateur.
Retour au début

RÉFÉRENCES

Pour plus d'informations, consultez le Kit de développement Microsoft .NET Framework SDK.

Retour au début
error handling try...catch...finally
Propriétés

ID d'article : 301283 - Dernière mise à jour : 04/30/2003 16:25:00 - Révision : 1.0

Microsoft Visual Basic .NET 2002 Initiation

  • kbhowto kbhowtomaster KB301283
Commentaires