try

EGL の try 文は、try ブロックの開始部分にマークを付けます。 このブロックは end 区切り文字で終了します。 try 文は、try ブロック内の次のいずれか 1 つの文でエラーが発生しても、プログラムの実行を続けます。

try 文により、コードに発生する可能性のあるすべての例外 (ファイルやレコードの終わりが見つからないなどの小さな例外から、 ハードの入出力エラーなどのより重大な問題まで) の結果に影響を与えることができます。例外が発生すると、例外タイプと一致する onException ブロックの最初の文で処理が再開されます。 onException ブロックは、明白な理由がなくても省略できます。 省略した場合、例外は try ブロックの終わりに続く最初の文で再開されます。

標準的な try ブロックには、次の 2 つの文グループが含まれています。

例外はエラーが発生した位置から上方に伝搬します。try 文が、 どんなに深くネストされていても、try ブロックから呼び出されたすべての関数内で生じた例外を処理できます。例外がスローされたら、最も近くに内包されている try ブロックがコントロールを得ます。 onException ブロックに一致する例外が見つからない場合、次にレベルの高い内包されている try ブロックがコントロールを受け取ります。 それ以上 try ブロックが見つからない場合、次の実行可能ステートメントがコントロールを受け取ります。

例外処理のプロセスについて詳しくは、例外処理を参照してください。

構文

try 文の構文図
statement
EGL 文。
exceptionRecordVariable
例外ステレオタイプを持つレコードの宣言 (『例外ステレオタイプ』を参照してください)。 このレコード変数は、レコード・タイプが例外のレコード・タイプと一致する場合に、その例外の messageIDmessage、および可能な追加フィールドを保持します。

互換性

表 1. try 文の互換性に関する考慮事項
プラットフォーム 問題
DL/I データベース・アクセス dliVar.handleHardDLIErrors または vgVar.handlHardIOErrors のいずれかが 1 に設定されている場合は、DL/I セグメントに対する try ブロック内でハードの入出力エラーが発生しても、プログラムは実行を続けます。両方のシステム変数が 0 に設定されているか、try ブロックがない場合は、DL/I セグメントに対するハードの入出力エラーが発生すると、プログラムは終了します。dliVar.handleHardDLIErrors は、IMS™ メッセージ・キューまたは GSAM ファイルに関連付けられているシリアル・レコードには影響を与えません。
V60 の例外互換性
  • try ブロック内では単一の onException ブロックしか持つことができないほか、 例外タイプを指定することができません。
  • sysLib.currentException 変数を使用して、問題の性質を判別することができます。 この変数は、V6 互換性モードでのみ使用可能です。
  • 例外は、その例外が発生したパーツを越えて伝搬することはありません。try ブロックによって呼び出された関数内でエラーが発生した場合、その try ブロックでは同じ例外は起こりません。
  • handleHardIOErrors プログラム・プロパティーを YES に設定していない場合は、ハードの入出力エラーにより、アプリケーションが強制終了します。 その場合、EGL は例外をスローして、プログラムがハードの入出力エラーをそれ自体で処理できるようにします。
VisualAge® Generator 互換モード vgVar.handlHardIOErrors が 1 に設定されている場合、データベース入出力またはファイル入出力の try ブロックの中でハード入出力エラーが発生しても、プログラムは動作を続行します。vgVar.handlHardIOErrors が 0 に設定されているか、または try ブロックがない場合、データベース入出力またはファイル入出力に対するハード入出力エラーが発生すると、プログラムは終了します。 vgVar.handleHardIOErrors のデフォルトは 1 ですが、handleHardIOErrors プログラム・プロパティーを NO に設定することにより、デフォルトの設定を 0 にできます。この設定は、VisualAge Generator ではデフォルトです。

フィードバック