Урок № 12. Обработка ошибок


Обработка ошибок

Доброго времени суток! Сегодня мы поговорим о том, как обрабатывать ошибки в программах, написанных на языке C#.

Сразу хочу отметить, что ошибки в программах, можно условно разделить на две группы: ошибки времени сборки программы (на этапе компиляции) и ошибки времени выполнения программы. В этом уроке разговор будет об ошибках времени выполнения!

Давайте вспомним пример из предыдущего урока, где пользователь должен был ввести с клавиатуры два целых числа. Тогда я еще просил вводить именно числа и именно целые. Почему? До потому, что если ввести в той программе не число, а просто текст, или не целое число, а дробное, то будет ошибка времени исполнения! Именно по этой причине, я сегодня рассказываю Вам про механизмы и принципы обработки ошибок в программах.

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

Блок кода, в котором могут возникнуть ошибки обозначается ключевым словом try, за которым следуют фигурные скобки (в которых и заключены потенциально опасные операции). Сразу за таким блоком должен следовать блок обработки ошибок, он обозначается ключевым словом catch, а в круглых скобках после этого слова, обозначается тип ошибок, которые обрабатывает данных блок кода, после закрывающей круглой скобки, следуют фигурные, внутри которых и реализуется обработка. Схематично, выглядит это так:

try
{
    //Потенциально опасный блок кода
}catch(тип_ошибок)
{
    //Обработка ошибок
}

//Дальнейшие операторы программы

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

На практике, после одного блока try, может быть несколько блоков catch, для отдельной обработки ошибок разных типов.

Давайте модифицируем код программы из предыдущего урока, добавим контроль и обработку ошибок, которые могут возникнуть при вводе пользователем некорректном данных.

//Потенциально опасный блок
try
{
    //Приглашение пользователю ввести первое число
    Console.Write("Введите первое число и нажмите клавишу Enter: ");

    //Получение первой строки
    string firstString = Console.ReadLine();

    //Преобразование первой строки в число
    int firstArg = Convert.ToInt32(firstString);

    //Приглашение пользователю ввести второе число
    Console.Write("Введите первое число и нажмите клавишу Enter: ");

    //Получение второй строки
    string secondString = Console.ReadLine();

    //Преобразование второй строки в число
    int secondArg = Convert.ToInt32(secondString);

    //Сложение двух переменных
    int result = firstArg + secondArg;

    //Вывод результата
    Console.WriteLine("Результат сложения введенных чисел: " + result.ToString());
}
//Блок обработки ошибок, SystemException - самый общий тип ошибок
catch (SystemException)
{
    Console.WriteLine("Во время выполнения программы произошла ошибка, вероятно, были введены некорректные данные!");
}

Теперь, если пользователь введет некорректные данные вместо целого числа, то произошедшая ошибка будет обработана. Если вставить этот код в метод «Main», собрать и запустить программу, то можно будет увидеть следующее поведение:

Пользователь ввел корректные данные

Пользователь ввел корректные данные

Пользователь ввел некорректные данные

Пользователь ввел некорректные данные

И так, в этом уроке была представлена базовая информация, касающаяся механизма обработки ошибок (исключительных ситуаций) в языке C#. В следующем уроке, мы поговорим о создании и использовании собственных методов (функций), а к теме обработки ошибок, вернемся еще и не раз!

Перейти к следующему уроку