
Урок #12 – Обработчик исключений. Оператор try-catch
Видеоурок
Что такое исключение?
Предположим, что вы разработали программу «Текстовый редактор». В программе пользователь может создать новый файл, вписать в него данные и далее сохранить файл в системе.
Если код прописан корректно, то никаких ошибок возникать не будет. Но давайте представим ситуацию, что пользователь открыл редактор, открыл нужный файл, записал в него данные, далее вручную удалил файл с компьютера и потом попытался сохранить файл через вашу программу.
При таком раскладе у вас получиться ошибка, которая сломает программу и отобьет любое желание у пользователя работать в вашей программе.
Получается, исключение - это ошибка, что возникает в ходе работы самой программы. Отслеживать такие ошибки при помощи условных операторов не всегда возможно, ведь программа уже запущена, поведение пользователя нам неизвестно заранее, а значит и «ловить» ошибку нам нужно в момент её создания.
Отлов ошибок
Для вышеописанного случая как раз и нужна конструкция try catch для отлова ошибок в момент их создания.
При помощи данной конструкции вы можете отслеживать ошибки различных форматов и событий. Можно отследить неверное открытие файла, можно отследить неверное подключение класса, можно отследить неверное написание переменной или функции, да чего уж там, можно отследить даже деление чисел на ноль!
Реализации конструкции try catch
Для добавления отслеживания ошибок можно прописать следующий код:
FileStream fs = null;
try {
// Открываем какой-либо файл
fs = new FileStream(@"C: empdata.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs);
string line;
// Данные считываются из файла и выводятся в консоль
line = sr.ReadLine();
Console.WriteLine(line);
}
catch(FileNotFoundException e) { // Если что-то пошло не так
Console.WriteLine("Файл не найден!");
// Ниже сообщаем компилятору об конкретной ошибке, но программу не прекращаем
throw new FileNotFoundException(@"[data.txt не в c: emp папке]", e);
}
finally { // Выполниться в любом случае
if (fs != null) // Если файл открыт
fs.Close(); // То закрываем его
}
В коде выше представлен очень простой пример использования исключений. Не обращайте внимание на его простоту, так как главное это рассмотреть общую конструкцию блока try catch.
При использовании такой конструкции, какая бы ошибка не получилась в ходе программы сама программа работать не перестанет и пользователь не получить плохой опыт в её использовании.
Если необходимо отследить несколько классов с ошибками, то можно добавить несколько блоков catch. Все они добавляются друг под другом точно также как в условных операторах.
Конструкция finally
В блок try catch
можно дописать конструкцию finally, что срабатывает каждый раз вне зависимости от того получили мы ошибку или нет.
Такая конструкция может быть удобной в случае работы с файлами, когда нам не важно получилась или нет ошибка, но нам важно обязательно закрыть файл.
Исходный код
Весь код будет доступен после подписки на проект!
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть