Timeout::Errorが罠過ぎる
RubyのTimeout::ErrorはStanderdErrorじゃないから、単純にrescueを書いただけでは拾ってくれない。 具体的にどういう事かというと
begin timeout(1) { sleep 10 #long long time work } rescue retry end
とかやってもTimeout::Errorが発生すると、retryされずにスクリプトは例外で落ちる。
begin timeout(1) { sleep 10 #long long time work } rescue retry rescue Timeout::Error retry end
とすればいい。 が、rescueの中身が同じってとっても気持ち悪いんだけど、どうすればいいかなあ。
追記
よく考えたらスーパークラスなExceptionを指定すればいいじゃん。
begin timeout(1) { sleep 10 #long long time work } rescue Exception retry end
rescueの後ろを省略すると、StanderdErrorだけ補足すると言うことなのね。
つまり、Timeout::Errorが罠、というよりはrescueが罠ということか。
しかしこうすると、cでプログラムを落とせなくなるなw
追記2
どうやら、rescue節には複数の例外を書くことができるらしい。(コメント欄参照)
begin timeout(1) { sleep 10 #long long time work } rescue Timeout::Error, StanderdError retry end
なるほど、こういう事ができるのか。 さすがにしっかり考えられているなぁ