Partilhar via


Como usar o bloco try/catch para capturar exceções

Coloque quaisquer instruções de código que possam gerar ou lançar uma exceção em um try bloco e coloque as instruções usadas para manipular a exceção ou exceções em um ou mais catch blocos abaixo do try bloco. Cada catch bloco 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 do arquivo. Como o código pode lançar qualquer uma das três exceções, ele é colocado em um try bloco. Três catch blocos capturam as exceções e as manipulam 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 Common Language Runtime (CLR) captura exceções não tratadas por catch blocos. Se uma exceção for detetada pelo CLR, um dos seguintes resultados poderá ocorrer dependendo da configuração do CLR:

  • Uma caixa de diálogo Depurar é exibida.
  • O programa para a execução e uma caixa de diálogo com informações de exceção aparece.
  • Um erro é impresso no fluxo de saída de erro padrão.

Nota

A maioria dos códigos pode lançar uma exceção, e algumas exceções, como OutOfMemoryException, podem ser lançadas pelo próprio CLR a qualquer momento. Embora os aplicativos não sejam obrigados a lidar com essas exceções, esteja ciente da possibilidade ao escrever bibliotecas para serem usadas por outras pessoas. Para obter sugestões sobre quando definir o código em um try bloco, consulte Práticas recomendadas para exceções.

Consulte também