Исключения, определяемые пользователем
Для определения своего типа исключения достаточно породить класс - наследник
класса 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;