Como usar o bloco try/catch para capturar exceçõesHow to use the try/catch block to catch exceptions

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.Place any code statements that might raise or throw an exception in a try block, and place statements used to handle the exception or exceptions in one or more catch blocks below the try block. 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.Each catch block includes the exception type and can contain additional statements needed to handle that exception type.

No exemplo a seguir, um StreamReader abre um arquivo chamado data.txt e recupera uma linha desse arquivo.In the following example, a StreamReader opens a file called data.txt and retrieves a line from the file. Uma vez que o código pode gerar qualquer uma de três exceções, ele é colocado em um bloco try.Since the code might throw any of three exceptions, it's placed in a try block. Três blocos catch capturam as exceções e lidam com elas, exibindo os resultados no console.Three catch blocks catch the exceptions and handle them by displaying the results to the console.

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.The Common Language Runtime (CLR) catches exceptions not handled by catch blocks. Se uma exceção é capturada pelo CLR, um dos seguintes resultados pode ocorrer dependendo da configuração do CLR:If an exception is caught by the CLR, one of the following results may occur depending on your CLR configuration:

  • Uma caixa de diálogo Depurar é exibida.A Debug dialog box appears.
  • O programa interromperá a execução e uma caixa de diálogo será exibida com informações de exceção.The program stops execution and a dialog box with exception information appears.
  • Um erro é impresso no fluxo de saída de erro padrão.An error prints out to the standard error output stream.

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.Most code can throw an exception, and some exceptions, like OutOfMemoryException, can be thrown by the CLR itself at any time. Embora os aplicativos não precisem lidar com essas exceções, esteja ciente dessa possibilidade ao gravar bibliotecas para serem usadas por outros.While applications aren't required to deal with these exceptions, be aware of the possibility when writing libraries to be used by others. Para obter sugestões sobre quando definir código em um bloco try, confira Práticas recomendadas para exceções.For suggestions on when to set code in a try block, see Best Practices for Exceptions.

Veja tambémSee also