C# для новичков: Обработка исключений try-catch

Обработка ошибок в программах

При выполнении программы могут возникать ошибки. Например, если программа ожидает числовое значение от пользователя, а получает строку, возникает фатальная ошибка, приводящая к завершению работы программы. Это нежелательно; лучше уведомить пользователя об ошибке, не прерывая работу программы. Конструкция try-catch позволяет это реализовать, отлавливая и обрабатывая различные исключения (ошибки).

Оператор try-catch

Для обработки ошибок используется конструкция try-catch:

try
{
    // Код, который может вызвать исключение
    uint32 num = Convert.ToUInt32(Console.ReadLine());
    Console.WriteLine(num);
}
catch (FormatException) // Обработка исключения FormatException
{
    // Код, выполняемый при возникновении FormatException
    Console.WriteLine("Вы ввели некорректный формат.");
}

Блок try содержит код, который может вызвать исключение. Блок catch указывает тип исключения (FormatException в данном случае) и содержит код для обработки этой ошибки. Теперь, при некорректном вводе, программа выведет сообщение об ошибке, но не завершится. Пример демонстрирует обработку исключения FormatException, возникающего при попытке преобразовать строку в число uint32.

Обработка исключения DivideByZeroException

Создадим переменные a = 5 и b = 0, и попытаемся вычислить a / b:

try
{
    int a = 5;
    int b = 0;
    int result = a / b;
    Console.WriteLine(result);
}
catch (DivideByZeroException)
{
    Console.WriteLine("Деление на ноль.");
}

Это вызовет исключение DivideByZeroException. Обработка этого исключения с помощью try-catch предотвращает завершение программы и выводит информативное сообщение пользователю.

Обработка нескольких исключений

Пользователь может ввести и не число, и ноль. Можно обработать оба случая:

try
{
    int a = Convert.ToInt32(Console.ReadLine());
    int b = Convert.ToInt32(Console.ReadLine());
    int result = a / b;
    Console.WriteLine($"Результат: {result}");
}
catch (DivideByZeroException)
{
    Console.WriteLine("Деление на ноль!");
}
catch (FormatException)
{
    Console.WriteLine("Вы ввели некорректный формат данных!");
}

Порядок catch блоков не важен.

Блок finally

Блок finally выполняется всегда, независимо от того, возникло исключение или нет. Полезен для освобождения ресурсов (например, закрытия файлов или соединений с базой данных):

try
{
    // ... код ...
}
catch (Exception ex)
{
    // ... обработка исключений ...
}
finally
{
    // ... код, который выполнится всегда ...
}

Конструкция try-catch позволяет создавать более надежные программы, обрабатывая ошибки без фатального завершения. Правильное использование try-catch-finally делает код более устойчивым к ошибкам и улучшает пользовательский опыт.

Что будем искать? Например,программа