Что делать, если что-то идет не так. Обработка ошибок
Обновлен: Ноябрь 2007
На этом занятии будет рассказано, как создать базовый код обработки ошибок для программ.
Даже в хорошо разработанных программах иногда возникают ошибки. Некоторые ошибки являются дефектами в коде, которые можно найти и исправить. Другие ошибки являются естественными следствием работы программы; например, программа может попытаться открыть файл, который уже используется. В подобных случаях ошибки можно спрогнозировать, но невозможно предотвратить. Задача прогнозирования этих ошибок и помощи программе справляться с ними ложится на программиста.
Ошибки во время выполнения
Ошибка, возникающая при выполнении программы, называется ошибкой во время выполнения. Ошибка во время выполнения возникает в тех случаях, когда программа пытается выполнить действие, не описанное в ней. Например, ошибка во время выполнения произойдет, если приложение пытается выполнить недопустимую операцию, вроде преобразования нечисловых строк в числовое значение.
При возникновении ошибки во время выполнения программа выдает исключение, которое обрабатывает ошибки посредством поиска в программе кода для обработки ошибки. Если такой код не найден, программа останавливается и должна быть перезапущена. Поскольку это может привести к потере данных, желательно создать код для обработки ошибок везде, где предполагается их возникновение.
Блок Try...Catch...Finally
Блок Try...Catch...Finally можно использовать для обработки ошибок во время выполнения в коде. Вы можете Try сегмент кода — если исключение выдается этим кодом, управление переходит к блоку Catch, а затем выполняется код в блоке Catch. После завершения кода выполняется любой код в блоке Finally. Весь блок Try...Catch...Finally помещен в оператор End Try. В следующем примере показано, как используется каждый блок.
Try
' Code here attempts to do something.
Catch
' If an error occurs, code here will run.
Finally
' Code in this block will always run.
End Try
Вначале выполняется код в блоке Try. Если он выполняется без ошибок, программа пропускает блок Catch и выполняет код в блоке Finally. Если же в блоке Try возникает ошибка, выполнение немедленно переходит к блоку Catch, и выполняется записанный там код; затем выполняется код в блоке Finally.
Практическое задание
Чтобы использовать блок Try...Catch
В меню Файл выберите команду Создать проект.
В диалоговом окне Создание проекта в области Шаблоны выберите Приложение Windows.
В поле Имя введите TryCatch и нажмите кнопку ОК.
Откроется новый проект Windows Forms.
Из Панели элементов перетащите один элемент управления TextBox и один элемент Button на форму.
Дважды щелкните элемент управления Button, чтобы открыть редактор кода.
В обработчик событий Button1_Click введите следующий код:
Try Dim aNumber As Double = CDbl(Textbox1.Text) MsgBox("You entered the number " & aNumber) Catch MsgBox("Please enter a number.") Finally MsgBox("Why not try it again?") End Try
Нажмите клавишу F5 для запуска программы.
Введите числовое значение в текстовом поле и нажмите кнопку. Отображается окно сообщения, показывающее введенное число, за которым следует предложение повторить попытку.
Затем введите нечисловое значение в текстовом поле, например слово, и нажмите кнопку. На этот раз, когда программа пытается преобразовать текст поля в число, она не может это сделать, и возникает ошибка. Вместо завершения кода в блоке Try будет выполнен код в блоке Catch, и появится окно сообщения, предлагающее ввести число. Затем выполнится блок Finally, приглашающий повторить попытку.
Следующие действия
В этом уроке были рассмотрены способы использования блоков Try...Catch...Finally для создания основной структуры обработки ошибок. Это занятие завершает введение в язык Visual Basic. В следующей последовательности уроков будет рассказано, как создавать пользовательский интерфейс для программ.
Следующее занятие: Создание внешнего вида программы. Введение в Windows Forms
См. также
Задачи
Программный выбор между двумя возможностями. Оператор If... Then
Знайте свои ошибки. Три типа ошибок в программировании
Ссылки
Оператор Try... Catch... Finally (Visual Basic)