UiPathでのエラーハンドリングについて

現在エラーハンドリングの処理を実装中なのですが、以下の点がわからず困っています。
(1)何らかのエラーを発生させた際にSystem.Exceptionでcatchができない
(2)何らかのExceptionをthrowした際にcatchができない
(throwでエラーが発生しているように見えるのですが、ログに詳細が出ないため何のエラーかわかりません)

設定などの不足点などありましたらご教示いただけますでしょうか。

アクティビティのパラメータで、エラー時継続をtrueにするとcatchされないような…

ありがとうございます。
確認しましたが、使用しているアクティビティには「エラー時継続」の設定はありませんでした。

投稿主様と似た状態なので、こちらに質問させていただきます。

Try に Sequence が入っていると、Sequence内で発生した Exception が Catch に流れてくれず、止まってしまいます。
(エラーの内容は止まった場所で特定できるので、投稿主様とは違う問題かもしれないです)

以下のような内容のワークフローを実行すると、Throw で止まってしまいます。
Sequence を外すと、問題なく Finally まで進みます。
(Wiindows10、Studio 19.10です)

Try : Sequence(Throw[New Exception(“test”)]),
Catch : System.Exception(処理なし),
Finally : Message Box(“End”)

何か設定すれば Sequence内の Exception も 、Sequence の外から Catch できるんでしょうか?
それとも Try 内に Sequence は使えない仕様なんでしょうか?

(実際には、Tryで長めのブラウザ操作を数千回繰返しつつ、ループごとにDataTableのレコードにブラウザから取得した値を追加していき、例外発生時または正常終了時のみ Finally で DataTable を Excel に保存したいです。
Try のアタッチブラウザ内の一連の操作が Sequence内になってしまい、なぜかTryCatchで例外を拾えず。
例外発生時に途中終了させてしまった場合などに、途中経過を失わないようループごとにExcelに保存せざるを得なさそうで、少し困ってます)

@y-suetake
とりあえず、私の環境で動くthrowのサンプルを置いておきます。
これでも失敗する用なら、各々方の環境に依存する可能性があります。
throw_test.xaml (6.1 KB)

Jumboさん

ありがとうございます。
提示いただいたTryにThrowだけが入っているものですが、
私の方でも試し、動作していることを確認しています。

状況としてはsolensenさんと同じような感じです。

Jumbo さん

Jumbo さんの環境では、Throw を Sequence の中に入れた状態で、Catch できますか?

(いただいたサンプルにSequence を追加して試しましたが、止まりました)

環境や設定次第で動くのか、仕様なのか分からず。。
(.NET や VB 分からないんですが、もしかしてこれって.NET や VB の文脈的に自明なことなんですかね。。)

単にベタ打ちでnew exceptionをthrowしているだけなので、Sequence 内でもキャッチできます。
以下の通り類似の事象はいくつかあるみたいなので、ちょっと調べてみるといいかもです。

  1. Project.jsonが悪さをしている可能性
    Try-Catch not working - #20 by ashoks93
  2. 2018.4.3だとthrowがうまく働いていない(バグ?)
    Try Catch is not working - #4 by loginerror
1 Like

@solensen

ここでの問題はFinallyでの処理が実行されない事でしょうか?
そうでしたらCatchの仕方を変えると上手く動作すると思われますが。。

@ytakayamaさん

いえ、Finallyの処理が実行されないということではなく、
エラー発生時やThrow時にCatchができないということです。

Catch内の処理はどのように記述しているのでしょうか?
それとStudioのバージョンはいくつでしょうか?

@ytakayama さん

私の方のものになってしまいますが、
Studioのバージョン:2019.10.2

Catch内の処理
以下のExceptionを記述し、それぞれでメッセージを出力(実際の処理はもう少し違います)
・BusinessRuleException(Throwで投げているため)
・Exception(それ以外のエラー発生時にCatchするため)

@y-suetake

image
(tryではexceptionをスローしているだけです)
私の環境(2019.12.0)では問題なく動作しましたので環境の問題かもしれないですね。。

catch内でもスローしている場合は、別の挙動をするという報告を見たことがありますが、
そういうわけではないですよね?

@y-suetake
@solensen
こんにちは

Try-Catch内のSequenceが無い状態でCatchが可能、Sequenceがある状態で別の挙動
というのはGlobal Exception Handlerの挙動と類似していますのでこのあたりに問題があるかもしれません。

もし明示的にGlobal Exception Handlerを指定しているなら、その中身の確認を
もし指定していないのであれば、一旦明示的にGlobal Exception Handlerを追加(新規から可能です)してみて、動作確認
→その後プロジェクトパネルで当該ファイルを右クリックでHandlerを削除してみて動作確認

あたりを試してみる価値はあるかもしれません。

1 Like

皆さま

アドバイスありがとうございました。

以下の挙動の違いが分かり、一応解決しました。
(Catch できていないというのは勘違いで、Catch に進む前に実行が中断したりしなかったりしていたようです)

(A) Studio の実行方法で『ファイルをデバッグ』or『デバッグ』(プルダウンから選択)、Try 直下に Throw の場合、
→ Finally に進む。

(B) Studio の実行方法で『ファイルをデバッグ』or『デバッグ』(プルダウンから選択)、Try と Throw の間に Sequence が存在する場合、
→ Throw で 止まる。(『続行』を押すと進む)

(C) Studio の実行方法で『ファイルを実行』or『実行』(いずれもプルダウンから選択)
Try と Throw の間に Sequence が存在する場合、
→ Finally に進む。

『(A)ではうまくいくのに、(B)ではうまくいかない』でハマっていましたが、finallyに行くか試すなら、(C)のやり方が正解だったようです。
(念のためパブリッシュして、ロボットトレイから実行しても、(C)と同じく上手くいきました)

同じデバッグ実行時で、(A)と(B)の挙動の違いが不可解です(^^;)
むしろ、(A)で例外で止まらないのがおかしい気もしてきました。。

なお、解決方法は以下から発見しました。(同じようにハマっていたようです)

@Jumbo
非常に参考になる見つけていただき、ありがとうございました。
それを糸口にして、解決法が見つかりました。

@Yoichi
Global Exception Handler 自体初めて知りました。
勉強になります。。

今回は、元々project.jsonには項目が無かったです。
一応、新規から追加、グローバルハンドラー.xamlを削除、としてから試してみましたが、デバッグ実行時の(A)(B)の挙動の違いは変わりませんでした。

1 Like