В этом контексте операция повышения не имеет никакого эффекта и должна быть удалена, потому что она просто повторно вызывает исключение, которое только что перехватил блок исключения. Повышение обычно используется для передачи управления в конец блока, когда нет подходящей обработки ошибок. Далее мы обрабатываем пользовательское исключение, но любое другое исключение должно быть обработано в другом месте.
try
someOperation;
except
on e: ECustomException do
SomeCustomHandelr;
else
begin
// the raise is only useful to rethrow the exception to an encompasing
// handler. In this case after I have called my logger code. as Rob
// mentioned this can be omitted if you arent handling anything because
// the compiler will simply jump you to the next block if there is no
// else.
LogUnexpectedException('some operation failed',e);
raise;
end;
end;
Будьте осторожны, что есть похожая форма без «рейза», который имеет побочный эффект от еды / сокрытия любых исключений. практика очень недобросовестных разработчиков, которые, как мы надеемся, перешли на позиции конкурентов.
with ADOQuery1 do begin
// .. fill out sql.text, etc
try
execSQL;
except
// no handler so this just eats any "errors"
end;