Использование блока try/catch для перехвата исключенийHow to use the try/catch block to catch exceptions

Поместите все операторы кода, которые могут вызвать исключение, в блок try, а операторы, которые обрабатывают исключения, поместите в одном или нескольких блоках catch под блоком 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. Каждый блок catch включает тип исключения и может содержать дополнительные инструкции, необходимые для обработки этого типа исключения.Each catch block includes the exception type and can contain additional statements needed to handle that exception type.

В следующем примере StreamReader открывает файл с именем data.txt и извлекает строку из файла.In the following example, a StreamReader opens a file called data.txt and retrieves a line from the file. Так как код может вызывать любое из трех исключений, он помещается в блок try.Since the code might throw any of three exceptions, it's placed in a try block. Три блока catch перехватывают исключения и обрабатывают их, отображая результаты в консоли.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

Среда CLR перехватывает исключения, не обрабатываемые блоками catch.The Common Language Runtime (CLR) catches exceptions not handled by catch blocks. Если исключение перехватывается в среде CLR, в зависимости от конфигурации среды CLR может возникнуть один из следующих результатов:If an exception is caught by the CLR, one of the following results may occur depending on your CLR configuration:

  • Откроется диалоговое окно отладки.A Debug dialog box appears.
  • Программа прекратит выполнение, и откроется диалоговое окно со сведениями об исключении.The program stops execution and a dialog box with exception information appears.
  • В стандартном потоке вывода ошибок будет выведена ошибка.An error prints out to the standard error output stream.

Примечание

Большая часть кода может создавать исключения, и некоторые исключения, например OutOfMemoryException, могут вызываться самой средой CLR в любое время.Most code can throw an exception, and some exceptions, like OutOfMemoryException, can be thrown by the CLR itself at any time. Приложениям не требуется обрабатывать эти исключения, но вы должны помнить об этом при написании библиотек, предназначенных для других пользователей.While applications aren't required to deal with these exceptions, be aware of the possibility when writing libraries to be used by others. Рекомендации о том, когда следует помещать код в блок try, см. в разделе о лучших методиках обработки исключений.For suggestions on when to set code in a try block, see Best Practices for Exceptions.

См. такжеSee also

ИсключенияExceptions
Обработка ошибок ввода-вывода в .NETHandling I/O errors in .NET