|
Обработка исключений
Как правило программист в своем проекте не может предсказать все действия пользователя,
входные значения и многие другие параметры. А чем крупнее и серьезнее проект тем таких мест в приложении становится
все больше и больше, поэтому перед программистом встает задача отловить и по возможность обработать
все возможные ситуации неправильного выполнения код.
Любое действие которое не может быть выполнено по той или иной причине называется Exception (исключение).
Данное исключение и будем отлавливать.
Для этого в C# есть конструкция try .. catch
Рассмотрим небольшой пример
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(a / b);
|
В данном примере вводятся два числа, далее идет деление и вывод результата.
Все бы ничего, а что если пользователь введет во втором случае 0?
Ведь на ноль делить нельзя - будет выведено исключение

Возможно пользователь даже не сможет понять что произошло, давайте ему объясним, отловив исключение и выдав ошибку
Заключим критическую область в try, а в catch выведем ошибку
try
{
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(a / b);
}
catch
{
Console.WriteLine("Ошибка: деление на ноль");
}
|

Теперь как видите пользователю все видно.
Но часто так бывает что в критической секции могут возникнуть разные исключения и их надо по разному обработать
тогда нам надо как можно точнее описать секцию catch то есть для какого именно исключения она будет отрабатывать.
Для этого рядом с Catch пишим имя исключения.
Так как пользователь может ввести не только цифры но и буквы, то обработаем и это исключение.
оно будет происходить в момент конвертации string в int
try
{
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(a / b);
}
catch (System.DivideByZeroException)
{
Console.WriteLine("Ошибка: деление на ноль");
}
catch (System.FormatException)
{
Console.WriteLine("Ошибка: Введите цифры");
}
|
Теперь будут все исключения обрабатываться как надо.

Осталось только рассмотреть последний блок данной конструкции - блок finally
Он выполняется всегд: произошла ошибка в catch или нет.
Пример может быть следующим: вы открываете файл что то делаете и в любом случае произшла или нет ошибка вы должны закрыть файл
это можно как раз сделать в finally
try
{
Открываем файл
}
catch
{
Console.WriteLine("Ошибка: что то с файлом");
}
finally
{
Закрываем файл
}
|
Предыдущая стр.   
Оглавление   
Следующая стр.
Средняя оценка:     (4,25 - 4 голосов) Для оценки необходимо зарегистрироваться
Только зарегистрировавшиеся пользователи могут оставлять комментарии
Комментирует veter 06.03.2011 22:00:04 а при попытке закрыть несуществующий файл тож отлавливать ошипку? ><
Комментирует Amidamar0 30.01.2012 18:51:15 нет наверное..
|
|