Обработка исключений — механизм, позволяющий программе реагировать на непредвиденные события во время выполнения. Оператор try-catch позволяет программе «поймать» и обработать исключение, предотвращая аварийное завершение.
Типичные исключения
Примеры событий, приводящих к исключениям:
- Деление на ноль.
- Некорректное преобразование типов данных.
- Попытка открыть несуществующий файл.
- Доступ к элементу массива за его пределами.
- Другие ошибки во время выполнения программы.
Практическое применение try-catch
Оператор try-catch — базовый механизм обработки исключений в C#. Конструкция try содержит код, потенциально вызывающий исключение. Возникновение исключения передаёт управление блоку catch, где оно обрабатывается.
int num;
int result;
Console.WriteLine("Введите число:");
try
{
num = Convert.ToInt32(Console.ReadLine());
result = num * 2; // Пример кода, который может вызвать исключение
Console.WriteLine(result);
}
catch (FormatException)
{
Console.WriteLine("Ошибка: Неверный формат ввода. Введите число.");
}
Если пользователь введёт не число, а символ, возникнет исключение FormatException. Блок catch перехватит его и выведет сообщение об ошибке. При корректном вводе, код в блоке try выполнится без ошибок.
Типы исключений и их обработка
Существуют различные типы исключений, соответствующие определённым ошибкам:
- Exception: Базовый класс для всех исключений. catch (Exception) перехватит любое исключение.
- FormatException: Исключение при некорректном преобразовании типов.
- DivideByZeroException: Исключение при попытке деления на ноль.
- FileNotFoundException: Исключение при попытке открыть несуществующий файл.
- IndexOutOfRangeException: Исключение при доступе к элементу массива за его пределами.
Использование нескольких блоков catch позволяет обрабатывать различные типы исключений:
try
{
// ... код ...
}
catch (FormatException ex)
{
Console.WriteLine("Ошибка формата: " + ex.Message);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Деление на ноль: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("Произошла ошибка: " + ex.Message);
}
Этот код обрабатывает FormatException, DivideByZeroException и любые другие исключения.
Блок finally
Блок finally содержит код, выполняющийся всегда, независимо от возникновения исключения:
try
{
// ... код ...
}
catch (Exception ex)
{
// ... обработка исключения ...
}
finally
{
Console.WriteLine("Блок finally всегда выполняется.");
}
Это полезно для освобождения ресурсов (например, закрытия файлов или соединения с базой данных). Даже return в блоке try не предотвратит выполнение кода в finally.
Оператор try-catch — мощный инструмент для обработки исключений и повышения надёжности программ. Использование различных типов исключений и блоков catch и finally позволяет создавать более устойчивые к ошибкам приложения.