PascalABC.NET

Исключения, определяемые пользователем

Для определения своего типа исключения достаточно породить класс - наследник класса Exception:

type MyException = class(Exception) end;

Тело класса-исключения может быть пустым, но, тем не менее, новое имя для типа исключения позволит его разграничить с остальными исключениями:

try   ...
except
  on MyException do
    writeln('Целочисленное деление на 0'); 
  on Exception do
    writeln('Файл отсутствует'); 
end;

Исключение может содержать дополнительную информацию, связанную с точкой, в которой произошло исключение:

type
  FileNotFoundException = class(Exception)
    fname: string;
    constructor Create(msg,fn: string);
    begin
      inherited Create(msg);
      fname := fn;
    end;
  end
;

...

procedure ReadFile(fname: string);
begin
  if not FileExists(fname) then
    raise new FileNotFoundException('Файл не найден',fname);
end;

...

try
  ...
except
  on e: FileNotFoundException do
    writeln('Файл '+e.fname+' не найден'); 
end;