Описание |
Ключевое слово Raise создает объект исключения, который передается обработчику исключений Delphi.
Вы можете поднимать исключения только в буквально исключительных случаях. Это не только из-за понесенных накладных расходов ресурсов при выполнении, но также и потому, что есть наиболее лучшие пути для обработки ошибок приложения, таких как коды возврата от функций.
Версия 1:
Raise используется в предложении Except инструкции Try. Она просто, переподнимает текущее исключение в приложении для того, чтобы обратиться к нему на более высоком уровне.
Версия 2:
Использует новый объект исключения для сообщения об исключении. Обычно, вы можете использовать объект Exception, или унаследованный объект Exception.
Вы можете создать объект во время исключения:
Raise Exception.Create('Error happened');
Версия 3: как и версии 2, но с изменением значения адреса исключения.
Во всех случаях, когда запрос Raise сделан, выполнения кода переходит к обработчику исключений Delphi - он или заканчивает программу, или использует текущую инструкцию Try, чтобы обработать её.
|
|
Похожие команды |
Except Начинает предложение заманивающее в ловушку ошибки Try инструкции
Finally Начинает безоговорочный раздел кода инструкции Try
On Определяет обработку особых ситуаций в предложении Try Except
Try Начинает код, который перехватывает ошибки
| |
|
Пример кода : Использование функции Raise |
var
fred, jim : string;
begin // Установка некоторых типовые названий
fred := 'Good name';
jim := 'Badname ';
// Попытка менять эти названия
try
ShowMessage(fred+' поменялся = '+SwapNames(fred));
ShowMessage(jim+' поменялся = '+SwapNames(jim));
except
On E : Exception do
ShowMessage(E.Message);
end;
end;
// Перестановка первого и второго названия в переданной строке названия // Поднимает исключение, если название недопустимо
function TForm1.SwapNames(name: string): string;
var
blankPos : Integer;
i : Integer;
nameLen : Integer;
begin // Очистка строки результата, чтобы указать, что нет никакого результата
Result := '';
// Нахождение позицию последнего названия
blankPos := Pos(' ', name);
// Если найдено, и позиция меньше конца названия // тогда пока всё нормально
nameLen := Length(name);
if (blankPos > 0) and (blankPos
then
begin // Нахождение начала второго названия
i := blankPos + 1;
repeat // Если начало последнего названия найденно, меняем первое и последнее название
if name[i] <> ' '
then Result := Copy(name, i, nameLen-i+1) + ' ' +
Copy(name, 1, blankPos-1)
else Inc(i);
until (i > nameLen) or (Length(Result) > 0);
end;
// Не удалось поменять первое и второе название ?
if Length(Result) = 0
then Raise Exception.CreateFmt('Недопустимое название : ''%s''', [name]);
end;
|
Good name поменялся = name Good
Недопустимое название : 'Badname '
|
|
| Пример кода : Поднимаем новый тип исключения |
var
age : Integer;
exc : EBadAge;
begin // Простой код, который поднимает новый тип исключения
age := 23;
if age <30
then
begin // Создание нового объекта исключения EBadAge
exc := EBadAge.CreateFmt('Bad age : %d',[age]);
// Теперь поднимаем этот новый объект исключения
Raise exc;
end;
end;
|
Диалог ошибки Delphi покажет сообщение :
Bad age : 23
|
|