Обработка исключений

uses System.SysUtils;

procedure ThrowIfTrue(Param: Boolean);
begin
  //except and finally do not share one
  //try: the blocks are nested
  try
    try
      if Param then
        raise Exception.Create('test');
    except
      WriteLn('except');
    end;
  finally
    //runs on any exit path
    WriteLn('finally');
  end;
end;

begin
  ThrowIfTrue(True);
  //printed: 'except' and 'finally'

  ThrowIfTrue(False);
  //printed only 'finally'
end.