Handle Exception
概要
これは、例外処理に使用されるネストされた演算子です。この演算子は、 Tryサブプロセスで演算子を実行し、エラーがなければ結果を返します。 Tryサブプロセスにエラーがある場合、代わりにCatchサブプロセスが実行され、その結果が返されます。
詳細
Handle Exception演算子はネストされた演算子です。つまり、2つのサブプロセスTryとCatchがあります。この演算子は、最初にTryサブプロセスの実行を試みます。エラーがない場合、つまり実行が成功した場合、この演算子はTryサブプロセスの結果を返します。エラーがある場合、プロセスは停止しません。代わりに、 Catchサブプロセスが実行され、その結果がこのオペレーターによって配信されます。エラーメッセージは、 例外マクロパラメーターを使用して保存できます。このTry / Catchの概念は、多くのプログラミング言語で使用される例外処理構造のようなものです。 例外マクロを使用してエラーメッセージを保存する場合は、マクロの基本を理解する必要があります。マクロの基本的な理解については、マクロの抽出演算子のドキュメントをご覧ください。サブプロセスに関する詳細については、サブプロセス演算子をご覧ください。この演算子は予期しないエラーもカバーするため、注意して使用してください。
入力
- in (IOObject)この演算子は複数の入力を持つことができます。 1つの入力が接続されると、別の入力(ある場合)を受け入れる準備ができている別の入力ポートが使用可能になります。入力の順序は同じままです。この演算子の最初のポートで提供されたオブジェクトは、ネストされたチェーンの最初のポート(サブプロセス内)で利用可能です。すべての入力を正しい順序で接続することを忘れないでください。サブプロセスレベルで適切な数のポートが接続されていることを確認してください。
出力
- out(IOObject)このオペレーターは複数の出力ポートを持つことができます。 1つの出力が接続されると、別の出力(ある場合)を配信する準備ができている別の出力ポートが使用可能になります。出力の順序は同じままです。サブプロセスの最初の出力ポートで配信されるオブジェクトは、外部プロセスの最初の出力ポートで配信されます。すべての出力を正しい順序で接続することを忘れないでください。チェーンのすべてのレベルで適切な数のポートが接続されていることを確認してください。
パラメーター
- exception_macroこのパラメーターは、エラーメッセージ(存在する場合)を保存するマクロの名前を指定します。このマクロは、 ‘%{macro_name}’構文を使用して他の演算子からアクセスできます。 範囲:文字列
- add_details_to_log単純な警告メッセージに加えて、スタックトレースと処理された例外の詳細もログファイルに追加する必要があるかどうかを示します。 範囲:ブール
チュートリアルプロセス
例外処理にTry/Catchを使用
このサンプルプロセスの目標は、属性の名前を変更した後、「Iris」データセットを配信することです。エラーが発生した場合は、元の「Iris」データセットがエラーメッセージとともに配信される必要があります。
「アイリス」データセットは、Retrieve演算子を使用してロードされます。 ExampleSetを見ることができるように、ブレークポイントがここに挿入されます。 4つの通常の属性a1、a2、a3、a4があることがわかります。次に、ハンドル例外演算子が適用されます。この演算子のサブプロセスをご覧ください。 Rename演算子は、属性の名前を変更するためのTryサブプロセスで適用されます。名前変更演算子の古い名前と新しい名前のパラメーターは意図的に空のままにしますが、これらは必須パラメーターであるためエラーです。 Catchサブプロセスは、元のExampleSetを取得し、Log演算子を適用して、出力を変更せずにExampleSetを配信します。 Logオペレーターは、エラーが発生した場合のエラーメッセージの記録に使用されます。
プロセスを実行し、結果ワークスペースに切り替えます。 ExampleSetの属性の名前が変更されていないことがわかります。これは、Tryサブプロセスでエラーが発生したため、実行されなかったためです。エラーメッセージは、名前の変更演算子の必須パラメーターの値が提供されなかったことを示すログで確認できます。 Handle Exception演算子がTryサブプロセスでエラーを検出すると、実行を停止し、代わりにCatchサブプロセスを実行して結果を配信したため、元のExampleSetは結果ワークスペースに表示されます。
次に、名前変更演算子の古い名前と新しい名前のパラメーターをそれぞれ「label」と「new_label」に設定し、プロセスを再度実行します。今回は、属性の名前が変更されており、エラーメッセージがないことがわかります。これは、Handle Exceptionオペレーターが最初にTryサブプロセスを実行しようとしたためです。エラーがなかったため、結果が配信され、Catchサブプロセスは実行されませんでした。