Опубликован: 31.08.2006 | Уровень: специалист | Доступ: свободно
Лекция 10:

Перехват ошибок с помощью структурной обработки ошибок

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Аннотация: В этой лекции вы узнаете, как создавать блоки кода, которые обрабатывают ошибки времени исполнения. Такие ошибки (также называемые исключениями) возникают при нормальных условиях работы – например, из-за отсутствия диска в дисководе или отключенного принтера

В этой лекции вы узнаете, как:

  • исправлять ошибки времени исполнения с помощью нового обработчика ошибок Try...Catch ;
  • проверять конкретные условия возникновения ошибок с помощью оператора Catch When ;
  • использовать свойства Err.Number и Err.Description для определения исключений;
  • создавать вложенные операторы Try...Catch ;
  • использовать обработчики ошибок в комбинации с защитными техниками программирования;
  • досрочно выходить из обработчиков ошибок с помощью оператора Exit Try.

В "Отладка программ на Visual Basic .NET" вы узнали, как распознавать в программах на Microsoft Visual Basic .NET ошибки времени исполнения, и как с помощью инструментов для отладки Microsoft Visual Studio .NET обнаружить в коде программы логические ошибки и другие дефекты. В этой лекции вы узнаете, как создавать блоки кода, которые обрабатывают ошибки времени исполнения. Такие ошибки (также называемые исключениями ) возникают при нормальных условиях работы - например, из-за отсутствия диска в дисководе или отключенного принтера. Блоки кода, обрабатывающие такие ошибки, называются структурными обработчиками ошибок (или структурными обработчиками исключений). Вы можете использовать их для распознавания ошибок времени исполнения при их возникновении в программе, подавления нежелательных сообщений об ошибках и настройки программы так, что она снова сможет получить управление и продолжить работу.

Visual Basic .NET включает блок Try...Catch - новую синтаксическую конструкцию для обработки ошибок. В этой лекции вы узнаете, как с помощью блоков кода Try...Catch перехватывать ошибки времени исполнения и как использовать свойства Err.Number и Err.Description для идентификации конкретных ошибок времени исполнения. Вы также узнаете, как для написания более гибких обработчиков ошибок использовать множественные операторы Catch, создавать вложенные блоки кода Try...Catch и использовать оператор Exit Try для досрочного выхода из блока кода Try...Catch. Техники программирования, о которых вы узнаете, аналогичны синтаксису On Error Goto из предыдущих версий Visual Basic, а структурные обработчики ошибок в настоящий момент предоставляются также языками программирования Java и C++. Наиболее надежные программы на Visual Basic используют несколько обработчиков ошибок для анализа непредвиденных обстоятельств и предоставления пользователям удобной и бесперебойной работы.

Что нового в Visual Basic .NET?

  • Блок кода Try...Catch - это новый способ написания структурных обработчиков ошибок. Хотя вы можете по-прежнему использовать ключевые слова Visual Basic 6, включая On Error Goto, Resume и Resume Next, запись Try...Catch дает возможность избежать потенциальных сложностей конструкций Goto и предлагает очень эффективный способ управления ошибками времени исполнения.
  • Оператор Catch When позволяет проверять конкретные условия программы и обрабатывать в одном блоке кода Try...Catch несколько ошибок времени исполнения.
  • Оператор Exit Try предлагает новый способ выхода из структурных обработчиков ошибок.
  • Visual Basic .NET продолжает предоставлять свойства Err.Number и Err.Description для идентификации ошибок времени исполнения. В дополнение к этому можно использовать новый метод Err.GetException, который возвращает информацию об условии возникновения ошибки, которая привела к остановке выполнения программы.

Обработка ошибок с помощью Try ... Catch

Ошибка времени исполнения - или обрушение программы - это неожиданная проблема, возникшая в программе на Visual Basic, после которой она не может продолжать работу. Вы могли видеть обрушение вашей первой программы, если Visual Basic не мог загрузить рисунок из файла, или в предыдущей лекции, когда вы при отладке намеренно внесли в код вашей программы ошибки. Ошибка времени исполнения возникает тогда, когда Visual Basic пытается выполнить оператор, который по какой-то причине не может быть выполнен в том виде, в котором он написан. Это не значит, что Visual Basic не достаточно умен, чтобы справиться с проблемой; это значит, что компилятору Visual Basic не сказали, что делать, если что-то пойдет не так.

К счастью, вы не обязаны мириться со случайными ошибками, которые приводят вашу программу к обрушению. Можно написать специальные процедуры Visual Basic, называемые структурными обработчиками ошибок, которые будут реагировать на ошибки времени исполнения. Обработчик ошибок отслеживает ошибку времени исполнения и говорит программе, как продолжать работу при возникновении этой ошибки. Обработчики ошибок помещаются в процедуры событий, там, где существует возможность возникновения проблемы, или в общие функции или подпрограммы, специально предназначенные для обработки ошибок. (Подробности о написании функций и подпрограмм см. в "Использование модулей и процедур" .) Как предполагает их название, обработчики ошибок обрабатывают ошибку с помощью оператора Try...Catch и специального объекта отслеживания ошибок, который называется Err. У объекта Err есть свойство Number, которое идентифицирует номер ошибки, и свойство Description, в котором содержится описание этой ошибки. Например, если ошибка времени исполнения произошла при загрузке файла с диска, обработчик ошибок может отобразить собственное сообщение об ошибке, которое укажет на проблему, и запретить дисковые операции до тех пор, пока эта проблема не будет устранена пользователем.

Когда использовать обработчики ошибок

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

Установка ловушки: оператор Try ... Catch

Блок кода, используемый для обработки ошибки времени исполнения, называется Try...Catch. Вы помещаете оператор Try в процедуре события непосредственно перед оператором, о котором вы беспокоитесь, а оператор Catch следует непосредственно за ним и содержит операторы, которые вы хотите выполнить, если произойдет ошибка времени исполнения. Также можно использовать некоторые дополнительные операторы, такие, как Catch When, Finally, Exit Try, а также вложенные блоки кода Try...Catch, которые демонстрируется в этой лекции. Базовый синтаксис обработчика исключений Try...Catch показан здесь.

Оператор Try указывает на начало обработчика ошибок

Try
  Операторы, которые могут вызвать ошибку времени исполнения
Catch
  Операторы, которые выполняются, если ошибка времени исполнения происходит
Finally
  Дополнительные операторы, выполняемые независимо от возникновения ошибки
End Try

где Try, Catch и End Try - это обязательные ключевые слова, а Finally и операторы, которые стоят за ним, необязательны. Заметьте, что программисты иногда называют операторы, находящиеся между ключевыми словами Try и Catch защищенным кодом, так как любые ошибки времени исполнения, возникающие в этих операторах, не приведут к обрушению программы. (Вместо этого Visual Basic выполняет операторы обработки ошибок, расположенные в блоке кода Catch.)

Ошибки путей и дисководов

В следующем примере продемонстрирована обычная ситуация возникновения ошибки времени исполнения - проблема с путем или дисководом. Чтобы выполнить это упражнение, загрузите пример проекта Visual Basic, который я создал для того, чтобы показать, как графические файлы открываются в объекте вывода изображений на форме Windows. Чтобы подготовиться к этому упражнению, вставьте дискету в дисковод A и скопируйте на него файл Fileopen.bmp. (Копию этого файла, а также проект Disk Drive Error, можно найти в папке c:\vbnet03sbs\Гл.9\disk drive error.) Вы будете использовать этот диск на протяжении всей лекции, чтобы сгенерировать ошибки времени исполнения и восстанавливаться после них.

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Сайдахмад Зарипов
Сайдахмад Зарипов
Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?

Андрей Гуменюк
Андрей Гуменюк
Молдова