例外のクラスの処理
例外ハンドラの記述 への移動
例外は、常にクラスとして表現されます。このため、開発者は常に例外クラスの階層を操作することとなります。たとえば、VCL は、ERangeError 例外を、EIntError の下位クラスとして定義しています。
基底例外クラスに対して例外ハンドラを提供する場合、そのクラスの直接のインスタンスだけでなく、その下位クラスのインスタンスも同様に捕捉しなければなります。たとえば、次の例外ハンドラは、整数の数学例外すべてを処理しており、その例外には、ERangeError、EDivByZero、EIntOverflow があります:
try
{ statements that perform integer math operations }
except
on EIntError do { special handling for integer math errors };
end;
この基底クラスに対するエラー ハンドラを、より限定した(派生した)例外のための特殊ハンドラと組み合わせることも可能です。これを行うには、catch 文を、例外が発生した際に検索したい順に、配置していきます。たとえばこのブロックでは、範囲エラーに対する特定の処理、そして、その他すべての整数数学エラーに対する処理を提供しています。
try
{ statements performing integer math }
except
on ERangeError do { out-of-range handling };
on EIntError do { handling for other integer math errors };
end;
EIntError のハンドラが、ERangeError のハンドラの前に来た場合、ERangeError の特殊ハンドラまで、実行は決して到達しない点に注目してください。