UiPath Studioの開発では、エラーハンドリングを実装することでロボットを安定稼働させることができます。
しかし、プログラミング未経験の方は、エラーハンドリングの経験がなく、戸惑われる方が多いです。
この記事では、トライキャッチ、リトライ スコープやスローによるエラーハンドリング方法について、解説します。
関連記事 【UiPath】Udemyのオンラインコースでワンランク上のロボット作成技術を学ぶ

システム開発,クラウド構築,サービス企画まで幅広い経験を持つITエンジニア。当ブログでは、UiPathや資格取得のノウハウを発信します。profile詳細 / twitter:@fpen17
- 例外(エラー)の種類
- 例外発生内容に応じた処理(トライキャッチ)
- 任意のタイミングで例外を発生(スロー)
- 例外の種類に応じた例外処理
- 主な例外一覧
- 渡された引数のいずれかが無効(ArgumentException)
- nullオブジェクト参照時の例外(NullReferenceException)
- I/O エラーが発生したときの例外(IO.IOException)
- 無効なメソッド呼び出し例外(InvalidOperationException)
- 境界外のインデックス使用時(IndexOutOfRangeException)
- 指定セレクターが存在しない(SelectorNotFoundException)
- 無効なキャストや変換の例外(InvalidCastException)
- ビジネス例外処理(BusinessRuleException)
- 例外発生時の記録
- 例外発生時に再度処理(リトライスコープ)
- 上位のワークフローでエラーハンドリング(再スロー)
- 例外発生時に処理終了(ワークフローを終了する)
- 例外発生時に処理を継続
- まとめ
例外(エラー)の種類
例外(エラー)の種類は、アプリケーション例外とビジネス例外に分かれます。
アプリケーション例外
アプリケーション例外は、システムやネットワークなど技術的な問題で発生するエラーのことを指します。
UiPathでのアプリケーション例外の例は、
- セレクターが見つからなくてクリックできない
- 指定したファイルが見つからない
- 文字列の変数を数値型に変換した
- データテーブル型の変数で、存在しない行列を指定した
です。
ビジネス例外
ビジネス例外は、自動化処理で使用するデータが、業務的な観点で不備があることを指します。
UiPathでのビジネス例外の例は、
- 製品価格が上限を超えているデータ
- 商品コードが誤っているデータ
- 決裁権のない部門で購入された商品データ
です。
例外発生内容に応じた処理(トライキャッチ)
例外発生内容に応じて処理を継続するのは、「トライ キャッチ (Try Catch)」アクティビティを使用します。
「トライ キャッチ (Try Catch)」は、System> Activities> Statements にあります。
- ①Tryブロック
例外が発生する可能性のある処理を配置します。 - ②Catchesブロック
例外の種類に応じた処理を行います。複数種類の例外を配置することも可能です。 - ③Finallyブロック
例外発生の有無に関わらず、最終的に行う処理を配置します
トライ キャッチの設定項目
設定場所 | 設定項目 | 設定内容 | |
[プロパティ] パネル内 | 共通 | 表示名 | アクティビティの表示名です。 |
その他
|
プライベート | オンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。 |
文字を整数へ変換して例外を発生させ、Catchesでエラーメッセージをログへ出力し、Finallyで終了メッセージをログへ出力する。
・Tryブロック
・Catchesブロック
・Finallyブロック
・実行結果
任意のタイミングで例外を発生(スロー)
任意のタイミングで例外を発生させる場合、「スロー(Throw)」アクティビティを使用します。
「スロー(Throw)」は、System> Activities> Statements にあります。
スローの設定項目
設定場所 | 設定項目 | 設定内容 | |
[プロパティ] パネル内 | 共通 | 表示名 | アクティビティの表示名です。 |
その他
|
例外 | アクティビティによってスローされた例外。 | |
プライベート | オンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。 |
スローでエラーを発生させ、Catchesでエラーメッセージをログへ出力し、Finallyで終了メッセージをログへ出力する。
・Tryブロック
-スローのプロパティ
・Catchesブロック
・Finallyブロック
・実行結果
例外の種類に応じた例外処理
主な例外一覧
例外の種類 | 例外の説明 |
System.Exception | すべての例外(エラー) |
System.ArgumentException | 渡された引数のいずれかが無効 |
System.NullReferenceException | nullオブジェクト参照時の例外 |
System.IO.IOException | I/O エラーが発生したときの例外 |
System.InvalidOperationException | 無効なメソッド呼び出し例外 |
System.IndexOutOfRangeException | 境界外のインデックス使用時 |
SelectorNotFoundException | 指定セレクターが存在しない |
BusinessRuleException | ビジネス例外 |
渡された引数のいずれかが無効(ArgumentException)
渡された引数のいずれかが無効の場合、System.ArgumentExceptionの例外が発生します。
サンプルプロセス
- CSVファイルをデータテーブルとして読み込み
- Tryブロックで存在しないデータテーブルの列名で指定
- CatchesブロックでArgumentExceptionの例外を拾ってエラーメッセージをログへ出力
- Finallyブロックでメッセージをログへ出力

・Cathesブロック
・Finallyブロック
・「CSVを読み込み」のプロパティ
・data.csvの中身
・実行結果
nullオブジェクト参照時の例外(NullReferenceException)
nullオブジェクトを参照した時は、System.NullReferenceExceptionの例外が発生します。
サンプルプロセス
- CSVファイルをデータテーブルとして読み込み
- Tryブロックで存在しないデータテーブルの行数で指定
- CatchesブロックでNullReferenceExceptionの例外を拾ってエラーメッセージをログ出力
- Finallyブロックでメッセージをログへ出力

・Catchesブロック
・Finallyブロック
・「CSVを読み込み」のプロパティ
・data.csvの中身
・実行結果
I/O エラーが発生したときの例外(IO.IOException)
I/O エラーが発生したときは、System.IO.IOExceptionの例外が発生します。
サンプルプロセス
- Tryブロックでテキストファイルを削除
- CatchesブロックでIOExceptionの例外を拾ってエラーメッセージをログ出力
- Finallyブロックでメッセージをログへ出力

・Catchesブロック
・Finallyブロック
・「削除」のプロパティ
・実行結果
「Data\test.txt」ファイルを開いた状態でプロセスを実行
無効なメソッド呼び出し例外(InvalidOperationException)
無効なメソッド呼び出した場合は、System.InvalidOperationExceptionの例外が発生します。
サンプルプロセス
- List型の変数をNew
- TryブロックでList型変数のlist1の最初の値をログへ出力
- CatchesブロックでInvalidOperationExceptionの例外を拾ってエラーメッセージをログへ出力
- Finallyブロックでメッセージをログへ出力

・Catchesブロック
・Finallyブロック
・実行結果
境界外のインデックス使用時(IndexOutOfRangeException)
境界外のインデックスを指定した場合、System.IndexOutOfRangeExceptionが発生します。
サンプルプロセス
- Array型の変数へ{10,20,30}を代入
- TryブロックでArray型の変数に存在しないインデックス番号を指定
- CatchesブロックでIndexOutOfRangeExceptionの例外を拾ってエラーメッセージをログへ出力
- Finallyブロックでメッセージをログへ出力

・Catchesブロック
・Finallyブロック
・実行結果
指定セレクターが存在しない(SelectorNotFoundException)
指定セレクターが存在しない場合、SelectorNotFoundExceptionが発生します。
サンプルプロセス
- TryブロックでYahooトップページの検索窓をクリック
- CatchesブロックでSelectorNotFoundExceptionの例外を拾ってエラーメッセージをログへ出力
- Finallyブロックでメッセージをログへ出力

・Catchesブロック
・Finallyブロック
・「クリック ‘STRONG’」のプロパティ
・実行結果
※IEブラウザを開かずにプロセスを実行
無効なキャストや変換の例外(InvalidCastException)
無効なキャストまたは明示的な変換をした場合、System.InvalidCastExceptionが発生します。
サンプルプロセス
- Tryブロックで文字aをInt型へ変換
- CatchesブロックでInvalidCastExceptionの例外を拾ってエラーメッセージをログへ出力
- Finallyブロックでメッセージをログへ出力

・Catchesブロック
・
・実行結果
ビジネス例外処理(BusinessRuleException)
業務上、エラーを発生させたい場合、BusinessRuleExceptionをスローします。
サンプルプロセス
- TryブロックでBusinessRuleExceptionをスロー
- CatchesブロックでBusinessRuleExceptionの例外を拾ってエラーメッセージをログへ出力
- Finallyブロックでメッセージをログへ出力

・Catchesブロック
・Finallyブロック
・「スロー」のプロパティ
・実行結果
例外発生時の記録
スクリーンショットを撮る (Take Screenshot)
エラーの発生画面を特定したい場合は、「スクリーンショットを作成 (Take Screenshot)」と「画像を保存 (Save Image)」を使用して、エラー画面を保存してます。
「スクリーンショットを作成 (Take Screenshot)」は、UI Automation>要素>属性 にあります。
「画像を保存 (Save Image)」は、UI Automation>画像>ファイル にあります。
スクリーンショットを作成の設定項目
設定場所 | 設定項目 | 設定内容 | |
[プロパティ] パネル内 | 共通 | 表示名 | アクティビティの表示名です。 |
エラー発生時に実行を継続 | アクティビティが例外をスローした場合でも、ワークフローを継続するかどうかを指定します。 | ||
出力 | スクリーンショット | 結果として得られるスクリーンショットです。 | |
オプション | 待ち時間 | 指定した UI 要素のスクリーンショットを取得する前の遅延時間 (ミリ秒単位) です。 | |
その他
|
プライベート | ンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。 | |
セレクター | クティビティの実行時に特定の UI 要素の検索に使用する Text プロパティです。 | ||
タイムアウト(ミリ秒) | エラーがスローされる前にアクティビティが実行されるまで待機する時間 (ミリ秒単位) を指定します。 | ||
準備完了まで待機 | アクションを実行する前に、ターゲットが準備完了になるまで待ちます。 | ||
要素 | 別のアクティビティから返される UiElement 変数を使用します。 | ||
クリッピング領域 | UiElement を基準とし、左、上、右、下の方向で、クリッピング四角形 (ピクセル単位) を定義します。 |
画像を保存の設定項目
設定場所 | 設定項目 | 設定内容 | |
[プロパティ] パネル内 | 共通 | 表示名 | アクティビティの表示名です。 |
エラー発生時に実行を継続 | アクティビティが例外をスローした場合でも、ワークフローを継続するかどうかを指定します。 | ||
入力 | ファイル名 | 画像を保存するファイルの完全なパスと名前です。 | |
画像 | ディスクに保存する画像です。 | ||
その他 | プライベート | オンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。 |
サンプルプロセス
- トライキャッチのTryブロックでYahooトップの検索窓をクリックする(プロセス実行時、Yahoo路線情報の画面を開いておき、SelectorNotFoundExceptionを発生させる)
- Cathesブロックで、エラーメッセージをログへ出力、スクリーンショットを日付と日時付きのファイル名で保存する。
- Finallyブロックで、メッセージをログへ出力する

・Catchesブロック
・Finallyブロック
・「クリック」のプロパティ
・「スクリーンショットを作成」のプロパティ
・「文字列型へ日付と時刻を代入」のプロパティ
・「画像を保存」のプロパティ
・変数
・実行結果
・スクリーンショットの画像ファイル出力先
・スクリーンショットの画像
メッセージをログ (Log Message)
エラーレベルとメッセージをログへ出力するのは、「メッセージをログ (Log Message)」を使用します。
「メッセージをログ (Log Message)」は、プログラミング>デバッグ にあります。
メッセージをログの設定項目
設定場所 | 設定項目 | 設定内容 | |
[プロパティ] パネル内 | ログ | メッセージ | ログに出力するメッセージです。 |
レベル | ログに出力するメッセージの重要度レベルです。 | ||
共通 | 表示名 | アクティビティの表示名です。 | |
その他 | プライベート | オンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。 |
UiPath のログ レベル
ログレベル | 既定のログ | 選択基準例 |
Off | なし | – |
Critical | Critical レベル以上で記録されたすべてのメッセージ。 | – |
Error | Error レベル以上で記録されたすべてのメッセージ。 | エラー発生時 |
Warning | Warning レベル以上で記録されたすべてのメッセージ。 | 正常実行ではないが、処理継続可能な場合 |
Information | Information レベル以上で記録されたすべてのメッセージ。 | 処理開始や終了、処理データのインデックス出力など |
Trace | Trace レベル以上で記録されたすべてのメッセージ。 | デバッグ時のみ出力したい場合 |
Verbose | Trace レベルで記録されたすべてのメッセージとワークフロー トラッキング ログ。 | – |
各レベルのログメッセージを出力する。
・実行結果
例外発生時に再度処理(リトライスコープ)
処理中に例外が発生した際、再度同じ処理を行いたい場合は、「リトライ スコープ (Retry Scope)」アクティビティを使用します。
「リトライ スコープ (Retry Scope)」は、ワークフロー> 制御 にあります。
- ①アクションブロック
再試行するアクティビティを配置します。 - ②条件ブロック
再試行するか判定するために。Boolean 値を返すアクティビティを配置します
(例:要素の有無を検出 (Element Exists)、画像の有無を確認 (Image Exists)、テキストの有無を確認 (Text Exists)])
リトライ スコープの設定項目
設定場所 | 設定項目 | 設定内容 | |
[プロパティ] パネル内 | オプション | リトライの回数 | シーケンスをリトライする回数です。 |
リトライの間隔 | 各リトライの合間の時間 (秒数) を指定します。 | ||
共通 | 表示名 | アクティビティの表示名です。 | |
エラー発生時に実行を継続 | アクティビティが例外をスローした場合でも、ワークフローを継続するかどうかを指定します。 | ||
その他 | プライベート | オンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。 |
Yahooトップページの検索窓に対して、クリックと要素検出が成功するか、5回失敗するまで、処理を繰り返す。
・「リトライスコープ」のプロパティ
・「クリック」のプロパティ
・「要素の存在を確認」のプロパティ
・設定変数
・対象のサイト(Yahooのトップページ)
・実行結果
※実行後、8秒経過してからYahooトップページを表示
上位のワークフローでエラーハンドリング(再スロー)
例外発生時、上位のワークフローでエラーハンドリングを行う場合、「再スロー (Rethrow)」を使用します。
「再スロー (Rethrow)」は、System> Activies> Statements にあります。
再スローの設定項目
設定場所 | 設定項目 | 設定内容 | |
[プロパティ] パネル内 | 共通 | 表示名 | アクティビティの表示名です。 |
その他 | プライベート | オンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。 |
サンプルプロセス
- 上位ワークフローのTryブロックでワークフロー ファイルを呼び出し
- 下位のワークフローのTryブロックで、BusinessRuleExceptionをスロー
- 下位のワークフローのCatchesブロックで、再スロー
- 上位のワークフローのCatchesブロックで、エラーメッセージを出力
- 上位のワークフローのFinallyブロックで、メッセージを出力

・上位ワークフローのCatchesブロック
・上位のワークフローのFinallyブロック
・下位ワークフロー
・下位ワークフローのCatchesブロック
・下位ワークフローの「スロー」のプロパティ
・実行結果
例外発生時に処理終了(ワークフローを終了する)
例外発生時にワークフローを終了させるのは、「ワークフローを終了」を使用します。
「ワークフローを終了」は、System> Activites> Statements にあります。
ワークフローを終了の設定項目
設定場所 | 設定項目 | 設定内容 | |
[プロパティ] パネル内 | 共通 | 表示名 | アクティビティの表示名です。 |
その他 | プライベート | オンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。 | |
例外 | インスタンスの終了を引き起こした例外を取得または設定します。 | ||
理由 | ワークフローインスタンスの終了理由を含む文字列入力引数。 |
サンプルプロセス
- Tryブロックで、文字をint型へ変換して例外を発生させる
- Catchesブロックで、エラーメッセージを出力した後、ワークフローを終了させる

・Catchesブロック
・Finallyブロック
・「ワークフローを終了」のプロパティ
・実行結果
・実行結果のログ
例外発生時に処理を継続
アクティビティで例外が発生した場合に処理を継続したい場合、特定アクティビティのプロパティにある「エラー発生時に実行を継続」のチェックをTrueにします。
「エラー発生時に実行を継続」のプロパティが存在するアクティビティの例は、「クリック (Click)」「テキストを取得 (Get Text)」、構造化データを抽出 (Extract Structured Data)です。
まとめ
- 例外は、システムやネットワークなど技術的な問題で発生するアプリケーション例外と、業務的な観点でデータに不備があるビジネス例外に分かれます。
- トライキャッチは、エラーが発生する可能性のある処理を配置するTryブロック、例外の種類に応じたエラー処理を行うCatchesブロック、最終的に行う処理を配置するFinallyブロックに分かれます。
- 任意のタイミングで例外を発生させる場合は、スローを使用します。
- 例外発生時に再度処理を行いたい場合は、リトライスコープを使用します。
関連記事 【UiPath】Udemyのオンラインコースでワンランク上のロボット作成技術を学ぶ
\教育訓練給付金対象講座なら受講料最大45万円給付/
*オンライン個別説明会&相談会への参加は無料
関連記事 現役SEエフペンがもしIT未経験からWebエンジニアを目指すならプログラミングスクール【ディープロ】を受講する
