Guide pratique pour utiliser le bloc try/catch pour intercepter des exceptions
Placez les instructions de code qui peuvent déclencher ou lever une exception dans un bloc try
et placez les instructions utilisées pour gérer l’exception ou les exceptions dans un ou plusieurs blocs catch
sous le bloc try
. Chaque bloc catch
inclut le type d’exception et peut contenir des instructions supplémentaires nécessaires pour gérer ce type d’exception.
Dans l’exemple suivant, un StreamReader ouvre un fichier appelé data.txt et récupère une ligne de ce fichier. Étant donné que le code peut lever une des trois exceptions, il est placé dans un bloc try
. Trois blocs catch
interceptent les exceptions et les gèrent en affichant les résultats dans la console.
using namespace System;
using namespace System::IO;
public ref class ProcessFile
{
public:
static void Main()
{
try
{
StreamReader^ sr = File::OpenText("data.txt");
Console::WriteLine("The first line of this file is {0}", sr->ReadLine());
sr->Close();
}
catch (Exception^ e)
{
Console::WriteLine("An error occurred: '{0}'", e);
}
}
};
int main()
{
ProcessFile::Main();
}
using System;
using System.IO;
public class ProcessFile
{
public static void Main()
{
try
{
using (StreamReader sr = File.OpenText("data.txt"))
{
Console.WriteLine($"The first line of this file is {sr.ReadLine()}");
}
}
catch (FileNotFoundException e)
{
Console.WriteLine($"The file was not found: '{e}'");
}
catch (DirectoryNotFoundException e)
{
Console.WriteLine($"The directory was not found: '{e}'");
}
catch (IOException e)
{
Console.WriteLine($"The file could not be opened: '{e}'");
}
}
}
Imports System.IO
Public Class ProcessFile
Public Shared Sub Main()
Try
Using sr As StreamReader = File.OpenText("data.txt")
Console.WriteLine($"The first line of this file is {sr.ReadLine()}")
End Using
Catch e As FileNotFoundException
Console.WriteLine($"The file was not found: '{e}'")
Catch e As DirectoryNotFoundException
Console.WriteLine($"The directory was not found: '{e}'")
Catch e As IOException
Console.WriteLine($"The file could not be opened: '{e}'")
End Try
End Sub
End Class
Le Common Language Runtime (CLR) intercepte les exceptions non gérées par les blocs catch
. Si une exception est interceptée par le CLR, il peut se produire l’un des résultats suivants selon la configuration du CLR :
- Une boîte de dialogue Débogage s’affiche.
- Le programme s’arrête et une boîte de dialogue d’information sur l’exception s’affiche.
- Une erreur s’affiche dans le flux de sortie d’erreur standard.
Notes
La plupart du code peut lever une exception, et quelques exceptions comme OutOfMemoryException peuvent être levées par le CLR lui-même à tout moment. L’utilisation d’applications n’est pas obligatoire pour traiter ces exceptions, mais envisagez cette possibilité quand vous écrivez des bibliothèques destinées à l’usage d’autres utilisateurs. Si vous souhaitez des conseils sur la définition de code dans un bloc try
, consultez Bonnes pratiques pour les exceptions.