Try Catch

フォローする

・概要
Design Stuido および Device Automation における Try Catch について説明します。

Design Studio
DSステップのエラー処理[次の代替手段を試行]を、ターゲット トライ ステップへの明示的な [次のステップ] リファレンスと併用すると、ステップは名前で識別されます。
ほとんどの場合、ターゲット ステップとその名前の細かい区別は重要ではありませんが、Java や C# の try-catch 構文に似た、例外処理機能を提供するのに悪用される可能性があります。

これらのプログラミング言語では、”try” と “catch” の間にあるコードのセクションには、特別なエラー処理があります。このセクションで特定のエラーが通知された場合 (名前付きの「例外」を「スローする」ことで)、

 

 

同様に名前をつけた “catch” に続くコードの一部が実行されます。try-catch 構文は入れ子にできるため、名前を付けた「例外」は必ず一致する名前が付いた最も内側にある “catch” により処理されます。

例:

try {
   ... code ...
   try {
     ... inner code ...
     throw new E(); // caught by innermost "catch"
   }
   catch (E e) {
     ... inner handling code ...
   }
   ... more code ...
   throw new E(); // caught by outermost "catch"
}
catch (E e) {
   ... outer handling code ...
}

ロボットでは、同じようなことをトライ ステップで行うことができます。「次のステップ」で選択されるトライステップ名は、(現在の実行パス上にある) 選択された同じ名前のトライステップの直ぐ側の次のステップを指していることを覚えておきましょう。同じ実行パス上であっても、複数のトライ ステップに同じ名前を使うことが許されています。したがって、各 try-catch 構文は、「例外」と同じ名前のトライ ステップでモデル化されます。トライ ステップには 2 つの分岐があり、1 つは “try” 構文のコード部分、もう 1 つは “catch” 構文のコード部分用です。

TryCatchRobot.png

 

Java/C# 構文と Design Studio の用語は、以下の表のように対応しています。

Java / C# 構文 Design Studio で使用される要素
try { …code…} トライ ステップの 1 番目の分岐 (コードに対応するステップ)
例外の名前 トライ ステップの名前
throw new E()

 

(トライのコード中)

E における [次の代替手段を試行] によるエラー処理
catch E { …code…} “E” という名前のトライ ステップの 2 番目の分岐 (コードに対応するステップ)

したがって、中心となる考え方は、トライ ステップをエラー処理に使うときは、処理するエラー状況の名前からトライ ステップに名前を付けます。メリットは以下のとおりです。

  • 名前を付けると、各トライ ステップの目的を明確にできます。
  • エラーが一般的なレベルで (ロボットで左側にあるトライ ステップを使用して) 処理されたとき、場合によっては (同じ名前の 2 番目のトライ ステップを使用して) 特殊な処理をするのが簡単になります。


【Device Automation】
DAのTry-catchステップでは、アクション実行時に発生した例外(Exceptions)を明示的にキャッチし、その例外を処理する方法を定義します。
Try-catchステップのプロパティは以下の3 つのブロックで構成されています。

■Try分岐
実行するアクションを指定します。

アクションの実行結果として例外が発生した場合、 Catch 分岐に例外をスローします。
アクションが正常に実行された場合は、Finall分岐で指定されたアクションの実行後にTry-Catchステップが終了します。

■Catch分岐
Try分岐のアクション実行時にスローされる可能性がある例外を指定します。

Catch分岐は1つ以上の例外のリストと、その例外がスローされた場合に実行するアクションで構成されます。
例外はThrow ステップによって明示的にスローされるか、その他のステップの実行中にエラーが発生するとスローされます。

Catch分岐で指定したアクションが正常に実行されると、Finally分岐で指定されたアクションの実行後にTry-Catchステップが終了します。
スローされた例外がリストされていない場合、またはCatch分岐も例外で終了した場合は、Try-Catchステップ自体が例外をスローしたように扱われ、その他のステップが例外をスローした場合と同じ方法で処理されます。

■Finally分岐
c7d0e058464e159f874fb49c905d367c.pngTry-Catch ステップを終了する直前に実行するアクションを指定します。

Finallyに指定したアクションは、Try と Catch の実行結果に関係なく、常に最後に実行されます。
Finally分岐が空(未設定)で、Try分岐で例外が発生、且つ、Catch分岐に例外がリストされていない、またはCatch分岐も例外で終了した場合は、Try-Catchステップ自体が例外をスローしたように扱われ、その他のステップが例外をスローした場合と同じ方法で処理されます。

Finally分岐のアクションで例外が発生した場合も、Try-Catchステップ自体が例外をスローしたように扱われます。

<Try-Catchによる例外処理の使用例>

(画像1.DA_Try-Catch説明)

Catch分岐およびFinally分岐でスローされた例外は、同じTry-CatchステップのCatch分岐では処理されません。

Try-Catchステップにより処理が行われなかった例外は、ワークフロー内で”not handled”に設定されます。
この場合、ワークフローおよびDAステップの実行が停止し、エラーはDAステップの[エラー処理]タブで指定されているように処理されます。