Разное
Облака / Clouds
The bast cloud service
Get 20 GB free!!!
Support WebDav.
Show more >>
time-tested cloud storage
Support WebDav.
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Изменить пароль для Paradox
Категория: Базы данных
Категория: Базы данных
Пароль на ADO
Категория: Базы данных
Категория: Базы данных
Получить первую и последнюю видимую строку в TRichEdit
Категория: Текст и строки
Категория: Текст и строки
Получить список запущенных приложений
Категория: Приложение
Категория: Приложение
Подсветить часть текста в DBGrid
Категория: Компоненты
Категория: Компоненты
Создать *.mdb-файл и таблицу в ней
Категория: Базы данных
Категория: Базы данных
Вытащить значение поля в выделенных строках
Категория: Базы данных
Категория: Базы данных
Как поместить графический элемент в ListBox
Категория: Компоненты
Категория: Компоненты
Тpансляция ошибок в BDE
Категория: Базы данных
Категория: Базы данных
BDE. Расположение БД по псевдониму
Категория: Базы данных
Категория: Базы данных
Delphi - Справочник: Try
Try
|
1 Try Statement {Statement...} Finally Statement {Statement...} End; 2 Try Statement {Statement...} Except Statement {Statement...} End; 3 Try Statement {Statement...} Except On {Name :} Exception type Do Statement {Else Statement} End; |
Ключевое слово (Unit System)
|
Начинает код, который перехватывает ошибки
|
Описание:
|
Ключевое слово Try используется для отметки начала блока инструкций, которые перехватывают ошибки. Если происходит ошибка, программа не заканчивается. Вместо этого, управление передаётся или к Finally или Excep разделу. Try используется следующими способами: Версия 1: В конструкции Try-Finally, инструкция Finally гарантированно выполнится, абсолютно независимо оттого, что произойдет в предложении Try. Однако, предложение Finally фактически не обрабатывает никаких исключений - программа закончится, если никаких пунктов Except не найдено (см. примечания ниже). Try-Finally обычно используется подпрограммой для гарантированной очистки, например освобождения ресурсов. Версия 2: В этой версии, раздел Exept будет выполнен, только если предложение Try сгенерирует исключение. Это используется для принятия альтернативных действий, когда что-нибудь идет не так, как надо. Пункт except не может определить тип ошибки. Версия 3: Она подобно версии 2, но определяет различные действия для различных типов исключений, таких как EInOutError. Пункт Else может использоваться как ловушка всех неопределенных типов исключений. Общий тип исключений Exception может использоваться для захвата всех типов исключений. По назначенному имени (Name) исключения, можно получить текст сообщения исключения (Name.Message) для его отображения или других использований. Если исключение не обработано инструкциями On или Else (для 3 версии), то выполняется проверка, находимся ли мы во вложенном блоке Try. Если да, то обрабатывается пункт Except своего родительского Try. Пункт Else не является, действительно необходимым, лучше использовать On E:Exception Do являющееся универсальной обработкой особых ситуаций, так как обеспечивает сообщение об ошибке (E.Message). Важно: вы можете определить тип ошибки, которая произошла, при использовании универсальной обработки особых ситуаций - On E:Exception Do. E это указатель на объект исключения. E.ClassName дает тип исключения, такой как 'EDivByZero', как показано в последнем примере. Следующий список исключений охватывает основные типы - всего имеется сотни классов исключения: Exception Базовый класс EAbort Аварийное завершение работы без диалогового окна EAbstractError Абстрактная ошибка метода AssertionFailed Утверждают неудавшийся запрос EBitsError Булев массив ошибок ECommonCalendarError Календарная ошибка EDateTimeError Ошибка DateTime EMonthCalError Ошибка месяца EConversionError Вызывается Convert EConvertError Ошибка конвертирования объекта EDatabaseError Ошибка базы данных EExternal Ошибка аппаратных средств/Windows EAccessViolation Нарушение прав доступа EControlC Произошло аварийной завершение работы пользователем EExternalException Другая Внутренняя ошибка EIntError Целочисленная ошибка EDivByZero Деление на ноль EIntOverflow Переполнение целого числа ERangeError Вне диапазона значений EMathError Ошибка с плавающей запятой EInvalidArgument Плохое значение аргумента EInvalidOp Несоответствующая операция EOverflow Значение слишком большое EUnderflow Значение слишком маленькое EZeroDivide Деление на ноль EStackOverflow Серьёзная проблема Delphi EHeapException Проблемы динамической памяти EInvalidPointer Плохой указатель памяти EOutOfMemory Нет возможности распределить память EInOutError Ошибка ввода/вывода EInvalidCast Ошибка произведенная объектом EInvalidOperation Плохая операция компонента EMenuError Ошибка пункта меню EOSError Ошибка операционной системы EParserError Ошибка синтаксического анализа EPrinter Ошибка принтера EPropertyError Ошибка свойства класса EPropReadOnly Недопустимое обращение к свойству EPropWriteOnly Недопустимое обращение к свойству EThread Ошибка потока EVariantError Различная ошибка |
Пример кода: Пример
|
//Пример кода : Версия 1: Деление на ноль с предложением finally var number, zero : Integer; begin // Попытка деленя целого числа на нуль - чтобы поднять исключение number := -1; Try zero := 0; number := 1 div zero; ShowMessage('number / zero = '+IntToStr(number)); finally if number = -1 then begin ShowMessage('Числу не было присвоено значение - использование значения по умолчанию'); number := 0; end; end; end; //Пример кода : Версия 2: Деление на ноль с простым блоком Except var number, zero : Integer; begin // Попытка деленя целого числа на нуль - чтобы поднять исключение Try zero := 0; number := 1 div zero; ShowMessage('number / zero = '+IntToStr(number)); except ShowMessage('Неизвестная ошибка'); end; end; //Пример кода : Версия 3: Деление на ноль с предложением Except On var number, zero : Integer; begin // Попытка деленя целого числа на нуль - чтобы поднять исключение Try zero := 0; number := 1 div zero; ShowMessage('number / zero = '+IntToStr(number)); except on E : Exception do ShowMessage(E.ClassName+' поднята ошибка, с сообщением : '+E.Message); end; end;
Результат:
|
Числу не было присвоено значение - использование значения по умолчанию Затем, программа заканчивается с сообщением об ошибке EDivByZero -, предложение finally не выловило ошибку. Неизвестная ошибка EDivByZero поднята ошибка, с сообщением : Division by zero |
Примечание:
|
Иногда Вы хотите построить конструкцию подобно этому: Try ... Except ... Finally ... End; где исключения заманены в ловушку и обработаны, но в любом случае, набор инструкций очистки будут выполнены. Это может быть достигнуто с помощью вложенных инструкций Try: Try Try ... Except ... End; Finally ... End; |