Поделиться через


Как использовать блок try/catch для обработки исключений

Поместите все операторы кода, которые могут вызывать исключение, в блок try, а операторы, используемые для обработки исключений, разместите в одном или нескольких блоках catch, находящихся ниже блока try. Каждый catch блок включает тип исключения и может содержать дополнительные инструкции, необходимые для обработки этого типа исключения.

В следующем примере StreamReader открывает файл с именемdata.txt и извлекает строку из файла. Так как код может вызвать любое из трех исключений, он помещается в try блок. Три catch блока перехватывают исключения и обрабатывают их, отображая результаты в консоли.

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 . Если CLR перехватывает исключение, в зависимости от конфигурации CLR может произойти один из следующих результатов:

  • Откроется диалоговое окно отладки .
  • Программа останавливает выполнение и появится диалоговое окно с сведениями об исключении.
  • Ошибка выводится в стандартный поток вывода ошибок.

Замечание

Большинство кода может вызывать исключение, и некоторые исключения, например OutOfMemoryException, могут быть вызваны самой средой CLR в любое время. Хотя приложениям не требуется иметь дело с этими исключениями, следует учитывать возможность написания библиотек для использования другими пользователями. Для предложений по тому, когда размещать код в блоке try, см. Лучшие практики для исключений.

См. также