Quick start manual
7-32
Delphi Language Guide
Exceptions
An exception block that contains no exception handlers, but instead consists only of a 
list of statements, handles all exceptions. For example,
try
ƒ
except
HandleException;
end;
Here, the HandleException routine handles any exception that occurs as a result of 
executing the statements between try and except.
Re-raising exceptions
When the reserved word raise occurs in an exception block without an object 
reference following it, it raises whatever exception is handled by the block. This 
allows an exception handler to respond to an error in a limited way and then re-raise 
the exception. Re-raising is useful when a procedure or function has to clean up after 
an exception occurs but cannot fully handle the exception.
For example, the GetFileList function allocates a TStringList object and fills it with file 
names matching a specified search path:
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 creates a TStringList object, then uses the FindFirst and FindNext functions 
(defined in SysUtils) to initialize it. If the initialization fails—for example because the 
search path is invalid, or because there is not enough memory to fill in the string 
list—GetFileList needs to dispose of the new string list, since the caller does not yet 
know of its existence. For this reason, initialization of the string list is performed in a 
try...except statement. If an exception occurs, the statement’s exception block 
disposes of the string list, then re-raises the exception.










