COMMENT FAIRE : Intercepter des exceptions dans Visual Basic .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 301283 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F301283
Agrandir tout | Réduire tout

Sommaire

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.

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

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 exception
    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
  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 code
    
    Try
          File.Create("c:/temp/test.txt")  ' Peut échouer pour différentes raisons
    
    Catch 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.

RÉFÉRENCES

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

Propriétés

Numéro d'article: 301283 - Dernière mise à jour: mercredi 30 avril 2003 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic .NET 2002 Initiation
Mots-clés : 
kbhowto kbhowtomaster KB301283
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com