19.1. Два вида оператора Try
Исключительные ситуации возникают при невозможности выполнения запланированных действий программой, например при делении на ноль, попытке открытия несуществующего файла, попытке извлечения корня от отрицательного числа или обращения к области памяти, выходящей за пределы, отведенные данной программе, и т.д. Стандартный обработчик таких событий выводит окно с сообщением об ошибке, и выполнение программы на этом заканчивается. Но иногда программист хочет сам обработать такие исключительные ситуации и принять решение о дальнейшем направлении выполнения программы. В Delphi это можно сделать несколькими способами. Например, как это было показано в лекции по работе с файлами, можно отключить стандартную обработку ошибок ввода–вывода вставкой в текст программы оператора {$I-}. Затем выполняются любые действия с файлами и проверяется код ошибки с помощью функции IOResult. Если он отличен от нуля, то можно проанализировать эту ошибку и принять какое–то решение. Затем можно опять включить стандартную отработку ошибок ввода–вывода оператором {$I+}. Можно также анализировать ситуацию до появления возможной ошибки с помощью операторов If и принимать какие–то решения до возникновения исключительной ситуации. Но все эти способы в настоящее время используются очень редко. В Delphi есть специальный оператор для защиты кода от исключительных ситуаций – это оператор
Try
{Защищаемый код }
Finally
{Операторы завершения защищаемого кода}
End;
и вторая его модификация:
Try
{Защищаемый код}
Except
On Exception1 Do Оператор1:
On Exception1 Do Оператор2;
……………
else
{Операторы для всех остальных исключительных ситуаций}
end;
Для первого варианта оператора Try в любом случае, произошла ли исключительная ситуация или нет, все равно выполняются операторы из секции Finally. Во втором варианте оператора Try при возникновении исключительной ситуации можно предусмотреть отдельную обработку любой из таких ситуаций. Для всех остальных исключительных ситуаций, для которых не предусмотрена отдельная обработка, будут выполняться операторы, следующие за ключевым словом Else. Чем же отличаются исключительные ситуации? Поскольку это объекты, то они отличаются классом или объектным типом. Объектный тип Exception описан в модуле SysUtils.pas. Этот класс является родительским для многочисленных дочерних классов, которые соответствуют различным исключительным ситуациям. Все имена потомков этого класса начинаются с буквы E, например, класс EZeroDevide – соответствует исключительной ситуации деления на ноль, а класс EInOutError – ошибке ввода–вывода. В последнем классе есть поле ErrorCode, которое определяет код ошибки ввода–вывода. Используя его, можно детализировать исключительную ситуацию, например:
Try
…………
except
on E:EInOutError do
Case E.ErrorCode of
2:ShowMessage(’Файл не найден!’);
3:ShowMessage(’Путь не найден!’);
5:ShowMessage(’Доступ запрещен!’);
32:ShowMessage(’Файл занят!’);
101:ShowMessage(’Диск переполнен!);
103:ShowMessage(’Файл не открыт!’);
…………..
end;
end;
Исключительные ситуации EInOutError возникают только тогда, когда установлена опция транслятора {$I+}, иначе надо самому проверять код ошибки с помощью функции IOResult. Следует помнить, что в директиве On указываются имена классов и проверка на совпадение идет в порядке следования имен исключительных ситуаций после слова Except, поэтому сначала следует располагать дочерние классы и только потом их родительские классы, иначе далее родительского класса проверка не пойдет. Например, класс EDivByZero является дочерним от класса EIntError, и, если мы хотим обрабатывать ситуацию EDivByZero, проверку на эту исключительную ситуацию нужно проводить до проверки ситуации EIntError, иначе мы никогда не дойдем до проверки ситуации EDivByZero.
- Программирование в среде Delphi
- Программирование в среде Delphi
- 1. История развития вычислительной техники, системы счисления и единицы информации.................................................7
- 2. Структура персонального компьютера и операционные системы.........................................................................13
- 3. Основы алгоритмизации и работа в delphi..........................18
- 4. Базовые элементы delphi...................................................................26
- 5. Стандартные функции и подпрограммы................................30
- 6. Операторы delphi......................................................................................33
- 7. Операторы циклов....................................................................................35
- 18. Выделение памяти под объект и прародитель всех классов – tobject..........................................................................................84
- 19. Обработка исключительных ситуаций................................87
- 20. Основные классы и общие свойства компонентов...93
- 26. Технология com.....................................................................................129
- 1. История развития вычислительной техники, системы счисления и единицы информации
- 1.1. История развития вычислительной техники
- 1.2. Системы счисления
- 1.3. Единицы информации
- 2. Структура персонального компьютера и операционные системы
- 2.1. Структура персонального компьютера.
- 2.2. Операционные системы
- 3. Основы алгоритмизации и работа в delphi
- 3.1. Основы программирования
- 3.2. Программирование в среде Delphi
- 4. Базовые элементы delphi
- 4.1. Алфавит среды Delphi
- 4.2. Константы
- 4.3. Переменные
- 4.4. Основные типы переменных
- 4.5. Операции над переменными и константами
- 5. Стандартные функции и подпрограммы
- 5.1. Математические функции
- 5.2. Функции преобразования
- 5.3. Дополнительные системные подпрограммы и функции
- 6. Операторы delphi
- 6.1. Оператор присваивания
- 6.2. Оператор безусловной передачи управления
- 6.3. Условный оператор if
- 6.4. Оператор разветвления Case
- 6.5. Составной оператор
- 7. Операторы циклов
- 7.1. Оператор цикла For
- 7.2. Оператор цикла Repeat
- 7.3. Оператор цикла While
- 8. Работа с массивами
- 9. Работа со строками
- 9.1. Процедуры работы со строками
- 9.2. Функции работы со строками
- 10. Работа с записями
- 11. Процедуры и функции
- 12. Модуль unit
- 13. Работа со множествами
- 14. Работа с файлами
- 14.1. Текстовые файлы
- 14.2. Типированные файлы
- 14.3. Нетипированные файлы
- 15. Работа с файлами и каталогами
- 16. Динамические переменные и структуры данных
- 16.1. Динамические переменные
- 16.2. Работа со стеком
- 16.3. Работа со списками или очередями
- 16.4. Работа с деревьями
- 17. Основы объектно–ориентированного программирования
- 17.1. Объекты и классы
- 17.2. Области видимости класса
- 17.3. Свойства (Property) и инкапсуляция
- 17.4. Методы, наследование и полиморфизм
- 17.5. События (Events)
- 18. Выделение памяти под объект и прародитель всех классов – tobject
- 18.1. Выделение памяти под объект
- 18.2. Описание класса tObject
- 18.3. Операторы приведения типов классов
- 19. Обработка исключительных ситуаций
- 19.1. Два вида оператора Try
- 19.2. Программное создание исключительной ситуации
- 19.3. Основные исключительные ситуации
- 20. Основные классы и общие свойства компонентов
- 20.1. Класс tList
- 20.2. Класс tStrings
- 20.3. Общие свойства компонентов
- 21. Графические возможности delphi
- 21.1. Класс Tcanvas
- 21.2. Классы тGгарhic и тРicture
- 21.3. Классы tFont, tPen и tBrush
- 21.4. Работа с изображениями
- 22. Визуальные компоненты delphi
- 22.1. Компонент tBitBtn
- 22.2. Компоненты tDrawGrid и tStringGrid
- 22.3. Компонент tPageControl
- 22.4. Компонент tTimer
- 22.5. Компонент tGauge
- 22.6. Компонент tСolorGrid
- 23. Стандартные диалоговые окна и типовые диалоги
- 23.1. Стандартные диалоговые окна
- 23.2. Типовые диалоги
- 24. Форма, приложение и глобальные объекты
- 24.1. Форма и ее свойства
- 24.2. Объект Application
- 24.3. Глобальные объекты
- Объект ClipBoard
- Объект Screen
- Объект Printer
- 25. Межпрограммное взаимодействие
- 25.1. Обмен сообщениями
- 25.2. Динамический обмен данными
- 25.3. Совместное использование общей памяти
- 25.4. Каналы
- 25.5. Сокеты
- 26. Технология com
- 26.1. Интерфейс
- 27. Технология автоматизации
- 27.1. Основы ole Automation
- 27.2. Примеры использования серверов автоматизации
- 27.3. Компоненты ActiveX
- 28. Динамические библиотеки
- 28.1. Создание dll
- 28.2. Использование dll
- 28.3. Пример написания dll
- 29. Работа с базами данных
- 29.1. Основные определения
- 29.2. Взаимодействие приложения на Delphi с базами данных
- 29.3. Компоненты взаимодействия с базами данных
- If adoTable1.Locate(’fio,stag’,varArrayOf([’Иванов’,’10’]),[])Then …;
- 29.4. Работа с локальной базой данных
- 30. Основы языка sql
- 30.1. Составные части sql
- 30.2. Команда select
- 30.3. Пример использования запросов в Delphi
- 31. Создание собственных компонентов
- 32. Работа с реестром
- 33. Перспективы программирования в delphi
- Литература
- 220013, Минск, п.Бровки, 6