例外処理ステートメントでは、既定のエラー処理メカニズムをバイパスし、エラー後のイベントのシーケンスをコントロールできます。Intent 言語では、これは Try...Catch...Finally ステートメントから行います。
Try 句は 1 つの Try ブロックと、その後に続く任意の数のオプションの Catch ブロックと、1 つの Finally ブロックで構成されています。単純な Try...Catch...Finally ステートメントの構文を以下に示します。
Try [<statements>] [Catch [identifier] [<statements>]] [Finally [<statements>]] End Try
Try ブロックに記述されたステートメントが実行されます。評価中に例外が発生した場合、Catch ブロックが検査され、例外と一致するかどうかが確認されます。Catch ブロックが例外と一致した場合、Catch ブロックのステートメントが評価されます。Try ブロックまたは Catch ブロックが終了すると、例外が発生して処理されているかどうかにかかわらず、Finally ブロックが実行されます。
Try ブロックで例外が生成されると、存在する場合は Catch ブロックが順次確認され、例外を処理できるかどうかが判断されます。一致する最初の Catch のみがステートメントを実行されます。
構文:
Catch [identifier] [<statements>]]
Catch 句で指定された識別子は、システム デザイン エラーから派生する必要のある、エラー パーツのデザインを示します。したがって、Catch Error はいずれかの例外と一致します。
Finally ブロックは、Try ブロックが終了するか、選択した Catch ブロックが終了したときに実行されます。少なくとも 1 つの Catch ブロックがある場合、Finally ブロックは省略可能です。
構文:
[Finally [<statements>]]
次の例では、Try ブロック内のステートメントが荷重パラメータを制限と比較します。荷重の値が制限を超えない場合には、Try ブロックが終了し、Finally ブロックのステートメントによりシステム メッセージが出力され、ループが繰り返されます。荷重の値が制限を超える場合には、例外が生成されプログラムの実行が中止されます。ただし、プログラムが中止される前に、Catch ブロックのステートメントにより実行を中止する前のシステム メッセージが出力されます。
Parameter Rule unitWeight As Integer = 5 Rule load As Number Dim counter As Integer = 1 Dim limit As Number = 25.0 Dim strItem As String = " item." Do If counter > 1 Then strItem = " items." End If load = load + unitWeight Try If load > limit Then Error() End If Catch Error printValue("ERROR: Load limit exceeded! Load = " + stringValue(load) + _ "kg. Program execution halted.") Error("ERROR: Load limit exceeded!", " Load = " + stringValue(load) + _ "kg for " + stringValue(counter) + strItem + " " + _ stringValue(limit) + "kg limit exceeded!") Finally If load <= limit Then printValue("Load = " + stringValue(load) + _ "kg for " + stringValue(counter) + strItem) End If End Try counter = counter + 1 Loop Until counter > 10 End Rule
Exit ステートメントを使用することで Try...Catch ステートメントを終了できます。