On

Печать
Рейтинг пользователей: / 0
ХудшийЛучший 

On

Описание

Try
Statement
{Statement...};
Except
On {Name :} Exception type Do Statement;
{Else Statement}
End;

Ключевое слово On определяет инструкцию обработки особых ситуаций в Except части Try инструкции.

Если указанное исключение (Exception) произошло в Try инструкции, то выполняется команда Do.

В зависимости от назначенного имени (Name) исключения, может быть выведено на экран сообщение с текстом исключения (Name.Message) или другое действие.

Если поднятое исключение не нашло соответствующего ему пункта On, тогда выполняется проверка, находимся ли мы во вложенном блоке Try. Если так, обрабатывается пункт Except его родительского Try. Если не найдено пункта On или Else, программа прерывается.

Предложение Else не является действительно необходимым - лучше использовать On E:Exception Do, универсальный обработчик исключительных ситуаций, так как он обеспечивает сообщение об ошибках (E.Message).

Для всех исключений объект Exception, это тот, на который ссылаются в пункте On. Эти объекты обычно происходят от класса Exception.

Вы можете определить тип исключения, которое произошло, посмотрев свойство ClassName, которое дает тип исключения, типа 'EDivByZero', как показано в примере.

Пример кода

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 с сообщением : Division by zero

var
number, zero : Integer;
begin
// Попытка деления целого числа на нуль, чтобы вызвать исключение
number := -1;
Try
zero   := 0;
number := 1 div zero;
ShowMessage('number / zero = '+IntToStr(number));
except
// Наше первое исключение не будет вызвано
On E : EInOutError do
ShowMessage('IO ошибка : '+E.Message);
// Это исключение будет вызвано
On E : EDivByZero do
ShowMessage('Ошибка деления на zero : '+E.Message);
// Перехват других ошибок
Else
ShowMessage('Неизвестная ошибка');
end;
end;

Ошибка деления на zero : Division by zero

 

Примечание