Ruby - 例外発生時 retry 回数指定!
Updated:
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 エラー” が出る局面等で活用しています。
以上。
Comments