Обработка ошибок в программах
При выполнении программы могут возникать ошибки. Например, если программа ожидает числовое значение от пользователя, а получает строку, возникает фатальная ошибка, приводящая к завершению работы программы. Это нежелательно; лучше уведомить пользователя об ошибке, не прерывая работу программы. Конструкция 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 делает код более устойчивым к ошибкам и улучшает пользовательский опыт.