Try except delphi - IT Справочник
Llscompany.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Try except delphi

Try except delphi

Ключевое слово Try используется для отметки начала блока инструкций, которые перехватывают ошибки. Если происходит ошибка, программа не заканчивается. Вместо этого, управление передаётся или к Finally или Excep разделу.

Try используется следующими способами:

В конструкции Try-Finally, инструкция Finally гарантированно выполнится, абсолютно независимо оттого, что произойдет в предложении Try. Однако, предложение Finally фактически не обрабатывает никаких исключений — программа закончится, если никаких пунктов Except не найдено (см. примечания ниже).

Try-Finally обычно используется подпрограммой для гарантированной очистки, например освобождения ресурсов.

В этой версии, раздел Exept будет выполнен, только если предложение Try сгенерирует исключение. Это используется для принятия альтернативных действий, когда что-нибудь идет не так, как надо. Пункт except не может определить тип ошибки.

Она подобно версии 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 Различная ошибка

Иногда Вы хотите построить конструкцию подобно этому:

Программирование на языке Delphi


Глава 4. Исключительные ситуации и надежное программирование


Авторы: А.Н. Вальвачев
К.А. Сурков
Д.А. Сурков
Ю.М. Четырько

Опубликовано: 26.11.2005
Исправлено: 10.12.2016
Версия текста: 1.0

Когда программист после компиляции получает готовый к исполнению файл, он искренне верит, что программа будет работать именно так, как он хочет. Пока она в его заботливых руках, так оно обычно и бывает. Когда же программа попадает в более суровые условия — к новому пользователю и на другой компьютер — с ней может произойти все, что угодно. “Новый хозяин“ может вместо ожидаемых цифр ввести буквы, извлечь корень из отрицательного числа, делить на ноль и выполнять множество других необдуманных, часто случайных действий. Особенно это касается интерактивных (диалоговых) приложений, а таких — громадное большинство. Из этого следует, что программист должен организовать мощную оборону от всех посягательств на жизнедеятельность своей программы в процессе ее выполнения. О том, как это сделать, рассказывается в этой главе.

4.1. Ошибки и исключительные ситуации

Вы должны отдавать себе отчет в том, что в любом работающем приложении могут происходить ошибки. Причины этих ошибок бывают разными. Некоторые из них носят субъективный характер и вызваны неграмотными действиями программиста. Но существуют и объективные ошибки, их нельзя избежать при проектировании программы, но можно обнаружить во время ее работы. Примеров таких ошибок сколько угодно: недостаточный объем свободной памяти, отсутствие файла на диске, выход значений исходных данных из допустимого диапазона и т.д.

Хорошая программа должна справляться со своими ошибками и работать дальше, не зацикливаясь и не зависая ни при каких обстоятельствах. Для обработки ошибок можно, конечно, пытаться использовать структуры вида if then Exit. Однако в этом случае ваш стройный и красивый алгоритм решения основной задачи обрастет уродливыми проверками так, что через неделю вы сами в нем не разберетесь. Из этой почти тупиковой ситуации среда Delphi предлагает простой и элегантный выход — механизм обработки исключительных ситуаций.

Исключительная ситуация (exception) — это прерывание нормального хода работы программы из-за невозможности правильно выполнить последующие действия.

Представим, что подпрограмма выделяет область динамической памяти и загружает в нее содержимое некоторого файла. Если в системе окажется недостаточно памяти, то данные будет негде разместить и попытка загрузить файл приведет к ошибке. Скорее всего, вся программа будет аварийно завершена из-за того, что оператор загрузки данных обратится по недоступному для программы адресу. Как этого избежать? При обнаружении проблемы подпрограмма должна создать исключительную ситуацию — прервать нормальный ход своей работы и передать управление тем операторам, которые смогут обработать ошибку. Как правило, операторы обработки исключительных ситуаций находятся в одной из вызывающих подпрограмм.

Читать еще:  Практикум по си шарп

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

Механизм обработки исключительных ситуаций довольно сложен в своей реализации, но для программиста он прост и прозрачен. Для его использования в язык Delphi введены специальные конструкции try. except. end, try. finally. end и оператор raise, рассмотренные в этой главе.

4.2. Классы исключительных ситуаций

Исключительные ситуации в языке Delphi описываются классами. Каждый класс соответствует определенному типу исключительных ситуаций. Когда в программе возникает исключительная ситуация, создается объект соответствующего класса, который переносит информацию об этой ситуации из места возникновения в место обработки.

Классы исключительных ситуаций образуют иерархию, корнем которой является класс Exception. Класс Exception описывает самый общий тип исключительных ситуаций, а его наследники — конкретные виды таких ситуаций (таблица 4.1). Например, класс EOutOfMemory порожден от Exception и описывает ситуацию, когда свободная оперативная память исчерпана.

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

Delphi

КОМПЬЮТЕРНЫЕ КУРСЫ «ПОИСК»

Исключительные ситуации и обработка исключений

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

С задачей перехвата ошибок и реагирования на них лучше всего справляется механизм обработки исключений (Структурированная обработка исключений (Structured exception handling – SHE) представляет собой метод обработки ошибок, благодаря которому можно восстановить нормальную работу приложения после сбоя в работе программы, который в противном случае был бы фатальным). Если в приложении, написанном с помощью Delphi, возникает ошибка, то приложение автоматически генерирует исключение. Исключением представляет собой объект, который описывает возникающую ошибку.

Генерация исключения означает всего лишь то, что приложение создало объект исключения и максимально подробно описало ошибку. Если мы не обрабатываем исключение (то есть не приготовлен специальный код для перехвата исключения), приложение само сделает это автоматически. Обычно приложение обрабатывает исключение, выводя на экран монитора окно с сообщением о возникшей ошибке. Например, если вы передадите функции StrToInt строку, содержащую пустую строку, то функция сгенерирует исключение.

Чтобы обработать исключение, сгенерированное функцией StrToInt, мы должны поместить вызов функции StrToInt в защищенный блок кода. Защищенным является блок кода, который может реагировать на некоторое исключение. В Delphi защищенный блок выглядит следующим образом:

try
оператор(ы)
except
операторы обработки исключения
end;

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

Если вы передадите функции StrToInt допустимую строку, и при этом исключение не возникнет, будет выполнен только тот код, который находится в блоке try. Код в блоке исключения выполняется только в том случае, если оператор, находящийся внутри этого блока, сгенерирует исключение.

Обработка специфических исключений в Delphi

Теперь давайте попытаемся создать простой калькулятор, с помощью которого можно будет делить числа. Интерфейс пользователя этой небольшой программы показан на рисунке ниже.

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

Одно из них, EConvertError, может быть сгенерировано в том случае, если значение одного из компонентов TEdit невозможно преобразовать к целому типу, а другое, EDivByZero, может быть сгенерировано тогда, когда предпринимается попытка разделить первое число на 0.

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

on Некоторое-Исключение do Обработка_Исключения;

Конструкцию on-do можно использовать только в рамках обработчика исключений:

try
оператор (операторы);
except
on Исключение do Обработка_Исключения;
on Другое_Исключение do Его_Обработка;

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

Если конструкцию on-do использовать для обработки специфических исключений, вы должны также написать код для обработки ошибок, о которых вам ничего не будет известно. Чтобы обработать исключения, которые вам не удастся обработать специфическим образом, можно добавить к обработчику исключения часть else.

try
оператор (операторы);
except
on Исключение do Его_Обра6отка;
on Другое_Исключение do Его_Обработка;
else
Обработка_Всех_Остальных_Исключений;
end;

Зарезервированное слово raise используется для генерации исключения. Чтобы сгенерировать исключение в Delphi, используйте зарезервированное слово raise, указывая вслед за ним экземпляр объекта исключения. Экземпляром объекта исключения обычно является вызов конструктора исключения.

Читать еще:  Файлы проекта delphi

Синтаксис генерации исключения обычно выглядит следующим образом:

raise Класс_Исключения.Create(‘Сообщение_Об_Ошибке’);

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

Использование объекта исключения

Конструкция on-do позволяет получать на время объект исключения с помощью следующего синтаксиса

on Идентификатор: Исключение do Его_Обработка;

В качестве идентификатора обычно применяется заглавная буква Е. Когда вы получаете объект исключения, вы можете использовать его подобно любому другому объекту и даже обращаться к его свойствам и методам. Единственное, что не рекомендуется делать, это уничтожать объект исключения, поскольку объекты исключения автоматически управляются обработчиком исключения.

Создание специальных исключений в Delphi

Создать специальное исключение несложно, и этот процесс ничем не отличается от создания специального класса. Специальные исключения должны порождаться от класса Exception или другого потомка этого класса. Имена классов исключений должны начинаться с заглавной буквы Е.

type
EMyException = class(Exception);

В листинге ниже показана генерация и перехват специального исключения в Delphi.

Защита распределения ресурсов

Зарезервированное слово try позволяет построить два различных блока: блок обработчика, исключений и блок защиты ресурсов. Блок обработчика исключений создается с помощью зарезервированного слова except, а блок защиты ресурсов— с помощью зарезервированного слова finally. Синтаксическая структура блока защиты ресурсов в Delphi выглядит следующим образом:

try
.
finally
.
end;

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

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

Блок защиты ресурса часто используется для того, чтобы обеспечить надлежащее освобождение динамически созданных объектов. Например, динамическое создание модальной формы необходимо всегда защищать с помощью блока try-finally.

В листинге ниже показан более короткий способ динамического создания формы, защищенной блоком try-finally.

Другое отличие между блоками обработки исключений и блоками обработки ресурсов заключается в том, что блок обработки ресурсов не обрабатывает исключения. Таким образом, если исключение возникнет, оно будет передано первому доступному обработчику исключений. Например, если вы выполните следующий код, то исключение EDivByZero приведет к тому, что обработчик исключений, используемый по умолчанию, выведет на экран монитора сообщение об ошибке, информирующее пользователя о возникшем исключении.

Если вы хотите обработать исключение EDivByZero (или любое другое исключение) внутри блока защиты ресурсов, вы должны написать вложенный блок обработчика исключений.

Следующий листинг показывает, каким должен быть вложенный обработчик исключений внутри блока защиты ресурсов. Вы можете также вкладывать блоки защиты ресурсов в другие блоки защиты ресурсов или блоки обработки исключений.

ИЗМЕНЕНИЕ ОБРАБОТЧИКА ИСКЛЮЧЕНИЙ, ИСПОЛЬЗУЕМОГО ПО УМОЛЧАНИЮ

Глобальный объект Application отвечает за обработку исключений, не обрабатываемых блоком обработки исключений, который может находиться где-то в приложении. Чтобы изменить обработчик исключений, используемый по умолчанию, мы можем использовать компонент TApplicationEvents относящийся к категории Additional (Дополнительные).

Компонент TApplicationEvents предлагает событие OnException, которое генерируется всякий раз, когда возникает необработанное исключение.

Событие OnException может быть обработано с помощью процедуры типа TExceptionEvent. Процедура, обрабатывающая событие OnException, принимает два параметра: объект Sender и объект Exception.

procedure TMainForm.AppEventsException[Sender: TObject; E: Exception);
begin

В рамках обработчика события OnException вы можете написать код, который будет обрабатывать исключения иным способом, нежели обработчик, используемый по умолчанию, или же оставить обработчик события пустым. Если вы не хотите, чтобы при возникновении исключения что-либо происходило, оставьте обработчик события пустым. В данном случае потребуется написать внутри блока обработчика события только какой-нибудь комментарий, чтобы редактор Code Editor не удалил код обработчика автоматически.

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

В листинге ниже показано, как производится регистрация исключений внутри обработчика события OnException.

Вы можете также модифицировать обработчик исключений, используемый по умолчанию, вручную (без применения компонента TApplicationEvents). Для этого нужно создать метод, который будет принимать те же параметры, что и событие OnException и назначить этот метод событию OnException в глобальном объекте Application.

Источник: Иван Хладни — Внутренний мир Borland Delphi 2006.

try except

Проблема с использованием оператора трей

Вот такой оператор нормально работал непосредственно когда я создавал процедуру и запускал ее на выполнение. Теперь когда вызов этой процедуры идет через другие процедуры вложенность порядка 3-х то в итоге получаю Фатал Эррор. Вот такая примерно структура при работе программы:

Также убирал //Exit думая что результаты выполнения операторов после except обнуляються когда выполняеться Exit.
И в серавно ошибка в этой строке.

Где я ошибаюсь? И надо ли делать проверку на исключение по всей иерархической цепочке или достаточно в первом этапе все проверить и спасет ли это от краха:

Читать еще:  Что значит в ассемблере знак доллара

x:=ReadKoord(‘X’,tmp); //************* Вот здесь выводит ОШИБКУ
>>> stsum = ‘X’
try
Result:=StrToFloat(stsum); // >>>StrToFloat(‘X’);
except
ShowMessage(‘Ошибка при попытки преобразования в строке номер ……’);
Exit;

Естественно, ошибка. ‘X’ — это не валидное флоат валуе.

x:=ReadKoord(‘X’,tmp); //************* Вот здесь выводит ОШИБКУ
>>> stsum = ‘X’
try
Result:=StrToFloat(stsum); // >>>StrToFloat(‘X’);
except
ShowMessage(‘Ошибка при попытки преобразования в строке номер ……’);
Exit;

Естественно, ошибка. ‘X’ — это не валидное флоат валуе.

Нет сдесь stsum не равно икс ( stsum = ‘X’) так сделано что stsum сумирует символы после символа «Х» или «У» или любова другова пока эти символы пробел запятая точка числа одним словом выделяем координаты из подобной страки «X 25.25 DFU Y 25.74 M4»

У меня все работает нормально ошибок в коде нет если файл действительно евляеться файлом автокада или Тефлекса то все проходит замечательно. Я уже расматриваю исключительные ситуации когда формат файла не соответствует стандартному.
Тоесть допустик чудесным образом мы получаем такую строку
X 5,,52 или Y 7,5,528 или Y 85 34,18
Теперь
StrToFloat(5,,52) — Ошибка ; StrToFloat(85 34,18) — Ошибка ;

Если задать переменную tmp=»85 34,18″
try
Result:=StrToFloat(tmp);
except
ShowMessage(‘Ошибка при попытки преобразования в строке номер ……’);
Exit;
end;
и теперь непосредствено по клику кнопки Бутон1 вызвать обработчик то он выдаст исключительную ситуацию и предотвратит крах программы.
Теперь если я эту процедуру ReadKoord — (онализ отдельной строки) вызываю процедурой ReadNC1 (Чтение всего файла), которая всвою очередь вызываеться после закрытия диолога о выборе читаймого файла, То это исключительное событие не наступает и он мне показывает ошибку в строке Result:=StrToFloat(stsum);

Сейчас я зделал так и всеравно сначала идет ошибка потом если нажимаю «Продолжить» а не брейк только после этого вылазиет сообщение
ShowMessage(‘Ошибка при попытке преобразования символов [пробел, или пустое место] в действительное число, стоящих за строкой Х (Y));

Текст дословный;
try
Result:=StrToFloat(stsum);
except
begin
Result:=1;
ShowMessage(‘Ошибка при попытке преобразования символов ‘ +stsum +’ в действительное число, стоящих за строкой ‘ +subst);
//Exit;
end;
end;

Все верно только присвоения x:=ReadKoord(‘X’,tmp); >>> x:=’ ‘ или » а если точнее я даже не знаю что мы имеем на выходе функции ReadKoord в исключительной ситуации наступает раньше чем исключительная ситуация вот вчем праблема.

Должно быть «Ошибка преобразования» Присвоеть Result:=1; и двигаться дальше тоесть все должно сработать в исключительной ситуации кординатм Х У присвоеться значение 1 и завалить меня окошками ShowMessage. Закоментировал даже ShowMessage мол может непереходит к следующему шагу пока не закраю осталось только это и всеравно событие x:=ReadKoord наступает раньше чем исключительное.

try
Result:=StrToFloat(stsum);
except
begin
Result:=1;
end;
end;

Добавлено через 12 минут
try
Result:=StrToFloat(stsum);
except
Result:=33333;
end;

Величина 33333 заноситься в базу данных тоесть событие наступает но почемуто позже чем x:=ReadKoord(‘X’,tmp) = Result:=StrToFloat(stsum) = ‘ ‘ или » — Ошибка;

Образовательный блог — всё для учебы

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

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

Конструкция Try .. Finally .. End

Конструкция Try..Finally гарантирует, что программа выполнит операторы, освобождающие ресурсы, независимо от того, было или нет возбуждено исключение. Таким образом, эта конструкция используется тогда, когда вполне достаточным является просто безопасно завершить программу после возникновения исключения. Исключения в таких конструкциях не обрабатываются, их обработка будет передана далее. Если другой обработки не предусмотрено, то управление будет передано обработчику по умолчанию.

Синтаксис конструкции следующий:

Try
Finally
End;

Следует отметить, что, если исключение не будет возбуждено, то операторы из раздела Finally также будут освобождать ресурсы. Отличие заключается в том, что:
• во-первых, при возникновении исключения часть операторов из раздела Try не выполняется, а при нормальной работе — выполняются все;
• во-вторых, после освобождения ресурсов вследствие возбуждения исключения поиск обработчика исключения продолжится, поскольку исключения этой конструкцией не обрабатываются, а при нормальной работе будет выполняться оператор, следующий за конструкцией Try..Finally.
Следует по возможности получать различные ресурсы перед конструкцией Try. Это гарантирует, что раздел Finally сможет должным образом освободить ресурсы.

C:=Cursor;
Cursor := crHourGlass;
edDivr.Visible:=false;
try
A/B
finally
Cursor:=C;
edDivr.Visible:=true;
end;

Конструкция Try .. Except.. End

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

Синтаксис конструкции следующий:

Try
Except
End;

Как и ранее, операторы раздела Try могут возбуждать исключения. Раздел Except содержит операторы, которые выполняют действия по очистке (cleanup code, termination code). Однако если ошибка не возникает, то операторы из раздела Except пропускаются.

Операторы раздела Try в обеих конструкциях называются защищенным кодом.

try
A/B;
except
lbRes.Caption:=’Niht’;
// raise;
end;

Вложенные конструкции Try

Delphi позволяет использовать вложенные конструкции обработчиков исключений. Глубина вложения и последовательность следования конструкций не ограничена. Общий синтаксис вложенных конструкций Try:

Try
Try
Exceptionally
End; Except|Finally
End;

Так, поскольку конструкция Try..Finally в действительности не обрабатывает исключения, то, заключив ее внутрь конструкции Try..Except, мы с помощью конструкции Try..Finally можем возвратить ресурсы системе, а уже затем с помощью конструкции Try..Except обработать исключение.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector