タイプ別に処理する例外を選択するか、同じコードを使用してすべての例外を処理することができます。例外を処理するということは、現行プログラムの終了を許可せずに、エラーに対して特別の処理を提供するということです。 また、EGL の throw 文を使用して独自の例外をトリガーし、 既存の例外を伝搬することも、プログラムが独自に検出したエラーに対するアラートをユーザーに出すこともできます。 throw を参照してください。
EGL がエラーを処理するために使用するメカニズムは try ブロックです (tryを参照)。try ブロック内のステートメントで例外がスローされると、そのプログラムでは、同じ try ブロック内で一致する onException ブロックが検索されます。 スローされた例外を参照する onException ブロックが存在する場合、コントロールはそのブロック内のコードに渡されます。
例外は、リモート側の呼び出し先プログラムやサービス呼び出しからは伝搬しません。 リモート側の呼び出し先プログラムがエラーが原因で終了した場合、InvocationException を受け取ります。 サービス呼び出しがエラーが原因で終了した場合、ServiceInvocationException を受け取ります。 いずれのタイプにも、元のエラーの説明が含まれています。 InvocationException には、呼び出し先プログラム内の returnValue および errno も、使用可能であれば含まれます。
例外は、通常ローカルの呼び出し先プログラムから伝搬します。
従来の例外処理方法を使用することもできます。V6 の例外互換性の使用を参照してください。
EGL は、実行時の問題について特定の性質を示すために、一連のシステム例外を備えています。 これらの例外はそれぞれ、例外ステレオタイプ (例外ステレオタイプを参照) を持つレコードであり、 このステレオタイプから情報を取り出すことができます。 onException ブロックは、このレコード・タイプを使用して特定の例外をキャッチします。
if (userRequest == "A")
try
add record1;
onException(ex1 FileIOException)
myErrorHandler(1);
onException(ex2 RuntimeException)
myErrorHandler(2);
onException(ex3 SQLException)
myErrorHandler(3);
onException(ex4 AnyException)
myErrorHandler(4);
end // try
end // if
システム例外について詳しくは、EGL 例外レコードを参照してください。