1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UiPath (produced with UiPath Friends)Advent Calendar 2024

Day 8

【UiPath】TryCatchのCatchブロックは下位の例外からキャッチする

Posted at

タイトルの通り、UiPathではCatchブロックは下位の例外からキャッチする。この時、Catchブロックを置く順番は特に影響しない。
以下の例ではTryブロックでスローしたSystem.IO.FileNotFoundExceptionは、「Exception ⇒ SystemException ⇒ IOException ⇒ FileNotFoundException」と継承されるクラスなので、最も下位の例外であるSystem.IO.IOExceptionブロックでキャッチされる。

image.png

image.png

前述の通りCatchブロックを置く順番は特に影響しないので、以下のように入れ替えても同じ結果になる。

image.png

ちなみにGPT-4君に尋ねると「Catchブロックは上から順に評価される」と回答が返ってきたが、これは誤り。VB.Netでは上から順に評価される仕様なので、それに引っ張られているのだろう。

Catchブロックの選択ルール
・例外は上位クラスよりも下位クラスでキャッチされる
例外が複数のCatchブロックに該当する場合、特定の例外にマッチするCatchブロックが優先されます。
より汎用的なクラス(上位クラス)のブロックは、特定の例外(下位クラス)のブロックが存在しない場合に実行されます。
・Catchブロックは上から順に評価される
TryCatchアクティビティのCatchブロックは、定義された順番に評価されます。
最初にマッチしたブロックが実行され、それ以降のブロックはスキップされます。

下位の例外をキャッチしたくない場合は?

System.IO.IOExceptionは拾ってほしいがSystem.IO.DirectoryNotFoundExceptionなど下位の例外は拾ってほしくない。そういう場面があるかはわからないが、そんな時はCatchブロック内でexception変数の情報を見て判断する。

image.png

System.IO.IOExceptionだけ拾いたければ、CatchブロックをExceptionの一つに絞り、exception.GetTypeメソッドで例外の型を確認してSystem.IO.IOExceptionの場合だけ分岐で処理を分ければいい。この形なら下位のSystem.IO.DirectoryNotFoundException等が流れてきてもてSystem.IO.IOExceptionの分岐には流れない。

image.png

image.png

参考

動作環境

UiPath.System.Activities v24.10.7

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?