Como usar o bloco try/catch para capturar exceções
Colocar todas as instruções de código que podem elevar ou gerar uma exceção em um bloco try
e posicionar instruções usadas para tratar a exceção ou exceções em um ou mais blocos catch
abaixo do bloco try
. Cada bloco catch
inclui o tipo de exceção e pode conter instruções adicionais necessárias para lidar com esse tipo de exceção.
No exemplo a seguir, um StreamReader abre um arquivo chamado data.txt e recupera uma linha desse arquivo. Uma vez que o código pode gerar qualquer uma de três exceções, ele é colocado em um bloco try
. Três blocos catch
capturam as exceções e lidam com elas, exibindo os resultados no 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
O CLR (Common Language Runtime) captura exceções não manipuladas pelos blocos catch
. Se uma exceção é capturada pelo CLR, um dos seguintes resultados pode ocorrer dependendo da configuração do CLR:
- Uma caixa de diálogo Depurar é exibida.
- O programa interromperá a execução e uma caixa de diálogo será exibida com informações de exceção.
- Um erro é impresso no fluxo de saída de erro padrão.
Observação
A maioria dos códigos pode lançar uma exceção, sendo que algumas exceções, tais como OutOfMemoryException, podem ser geradas pelo próprio CLR, a qualquer momento. Embora os aplicativos não precisem lidar com essas exceções, esteja ciente dessa possibilidade ao gravar bibliotecas para serem usadas por outros. Para obter sugestões sobre quando definir código em um bloco try
, confira Práticas recomendadas para exceções.