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.