Ruby - 例外発生時 retry 回数指定!

Updated:


※この記事は12年以上前に投稿されたもので、情報が古い可能性があります。

Ruby で例外発生時には処理を中止(exit)したり、リトライ(retry)したりすると思います。

特に、たまたま処理に失敗するような場合は、再度同じ処理を流す為に rescue 節に retry を記述します。

しかし、これは1度しか retry されません。 1度 retry してもまた失敗するかもしれないことだって考えられます。 (もちろん、明らかに失敗する処理は何回 retry しても無意味なので、exit にしますが)

以下、retry 回数を指定する方法についてのメモです。

記録Permalink

0. 前提条件Permalink

  • Cygwin 1.7.15
  • Ruby 1.9.3-p194

1. サンプルスクリプト・1Permalink

begin より前にカウンタを定義・初期化し、例外が発生する度にカウンタをインクリメントし、制限回数未満なら retry する、という例です。

def test_retry
  # リトライ回数
  cnt_retry = 0

  begin
    #
    # 何らかの処理
    #
  rescue
    # カウンタインクリメント
    cnt_retry += 1
    # 4回までリトライする
    retry if cnt_retry < 5
  end
end

2. サンプルスクリプト・2Permalink

Ruby では、メソッド内が全て begin 節の場合は、begin と対になる end は省略可能です。 そのような場合は、リトライ回数はメソッド内で定義できません。 以下のように、メソッドの引数で与えることで対応可能です。

def test_retry( cnt_retry = 0 )
  #
  # 何らかの処理
  #
rescue
  # カウンタインクリメント
  cnt_retry += 1
  # 4回までリトライする
  retry if cnt_retry < 5
end

最初にも述べたが、明らかに例外となる処理では何度リトライしても無意味です。 終了させずにリトライさせた方が効率的な場合には使えると思います。 当方も、HTML 取得時にたまたま “404 エラー” が出る局面等で活用しています。

以上。





 

Sponsored Link

 

Comments