Docly Child

エラーを捕捉(Try)

2179 views

この記事では、Try処理の設定方法について紹介します。

【できるようになること】

  • Try処理を設定
  • エラーをキャッチ

 Try処理

AUTOROのワークフロー実行中にエラーが発生した場合、基本的にワークフローは強制終了され、エラーが発生したタスクより後にあるタスク(アクション)については、実行されません。

ここで、エラーが発生した際にワークフローを強制終了(エラー終了)させたくない場合は、エラーを捕捉する(Try)処理を利用します。
Try処理の範囲内に設置されたアクションについては、エラーが発生した場合であっても、ワークフローが強制終了されることはありません。

この処理を用いると、以下のような不確定なエラーが予期されている場合に、強制終了を回避することが可能となります。

  • 意図しないエラー(コネクション先のサーバーエラーなど)
  • 偶発的に発生するエラー
 
 

 ワークフローの設定例

例として、以下のような構成のワークフローの設定方法を紹介します.

  1. 「エラーを捕捉する(Try)」を設置
  2. Tryの範囲内でエラーが発生した/しなかった場合の処理を記述する

Try処理の設定で必要になるパラメーターは「エラーを格納する変数名」のみです。

範囲内でエラーが発生した場合、エラー内容はここで定義された変数に保存されます。

Try処理で取得したエラーは、「エラーを格納する変数名」に設定した変数に保存されます。

後続の処理では${変数名}のフォーマットでエラー値を呼び出すことができます。
このエラー値を条件式内で呼び出すことにより、エラーが発生したか否かを判定することができます。

  • 条件分岐(IF)を、エラーを捕捉する(Try)の範囲”外”に設置します
  • エラーが存在するか否かを判定する条件式を入力します
    // エラーが発生した時の条件式
    ${変数名}
    
    //エラーが発生しなかった時の条件式
    ${!変数名}
    
  • 条件分岐(IF)の範囲内に、条件式に応じた処理を記述します

なお、Try内部でエラーが発生した際の処理が不要な場合は、このIFも不要となります。

格納されるエラーオブジェクト( ${error_obj} )の値は、次のような内容になっています。

{
  "message": "Error: something went wrong.", // エラーメッセージ
  "task_name": "+try_1+sub_try+click_point_1", // エラーが発生したタスクの名前
  "attempt_id": "2611", // エラーが発生した実行のID
  "session_time": "2020-08-24T22:16:45+09:00" // エラーが発生したセッションの開始時刻
}

これらの値は、以下のような記法にて、ワークフロー内のテキストとして呼び出すことが可能です(エラーが発生した場合のみ)。

${エラーを格納する変数名.message}
${エラーを格納する変数名.task_name}
${エラーを格納する変数名.attempt_id}
${エラーを格納する変数名.session_time}

以下のエラーは、捕捉ができません。
このエラーは、基本的には内部システム的なエラーを意味します。

  • unhandledRejection

# ブラウザを開く
+open_browser_1:
  action>: OpenBrowser
  url: 'https://docs.autoro.io'
  lang: 'ja-JP'
  headless: true
  useShadowDomSelector: false
  private: false

# エラーを捕捉する
+try_1:
  try>: error_obj
  _do:

    # 日時を取得
    +get_time_1:
      action>: GetTime
      format: 'YYYY-MM-DD HH:mm'
      timezone: 'Asia/Tokyo'
      relativeTime: ''
      private: false

    # クリック
    +click_1:
      action>: Click
      browser: +open_browser_1
      selector: body
      confirm: true
      ignoreError: true
      timeout: 30000
      private: false

    # ページからデータを抽出(故意にエラーを発生させています)
    +extract_data_1:
      action>: ExtractData
      browser: +click_1
      extractor: hogehoge
      format: csv
      multiple: false
      private: false

# 真のとき エラーが発生した時
+if_1:
  if>: ${error_obj}
  _do:

    # テキストを作成
    +text_1:
      action>: Text
      text: "ログ:エラーが発生しました\n${error_obj.message}"
      private: false
<Try>エラーを捕捉する

このページは役に立ちましたか?