Kiedy instrukcję raise zawarto w bloku wyjątku bez identyfikatora obiektu za nim, powoduje ona zgłoszenie wyjątku, który jest obsługiwany w bloku. Pozwala to procedurze obsługi na reagowanie na wyjątek w ograniczony sposób i powtórne zgłoszenie wyjątku. Powtórne zgłoszenie jest użyteczne kiedy handler nie może w pełni obsłużyć wyjątku.
Na przykład, funkcja GetFileList alokuje obiekt TStringList i wypełnia go nazwami plików wg wyspecyfikowanej ścieżki dostępu:
function GetFileList(const Path: string): TStringList;
var
I: Integer;
SearchRec: TSearchRec;
begin
Result := TStringList.Create;
try
I := FindFirst(Path, 0, SearchRec);
while I = 0 do
begin
Result.Add(SearchRec.Name);
I := FindNext(SearchRec);
end;
except
Result.Free;
raise;
end;
end;
GetFileList kreuje obiekt klasy TStringList, po czym używa funkcji FindFirst i FindNext (z modułu SysUtils) wypełnienia obiektu. Jeśli operacja nie powiedzie się, z powodu np. niewłaściwej ścieżki dostępu, lub braku pamięci w liście łańcuchów — funkcja GetFileList usuwa nowo utworzony obiekt, w chwili kiedy wywołujacy funkcję jeszcze nie wie o istnieniu takiego obiektu. Z tego powodu, inicjalizacja listy łańcuchów jest przeprowadzana w instrukcji try...except. Kiedy zostanie zgłoszony wyjątek, blok wyjątku usunie kolekcję łańcuhów, poczym powtórnie zgłosi wyjątek.