Timeout::Errorが罠過ぎる

Ruby の Timeout::Error は StandardError じゃないから、単純に 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 の後ろを省略すると、StandardError だけ補足すると言うことなのね。

つまり、Timeout::Error が罠、というよりは rescue が罠ということか。

しかしこうすると、^c でプログラムを落とせなくなるな w

追記 2

どうやら、rescue 節には複数の例外を書くことができるらしい。(コメント欄参照)

begin
  timeout(1) {
    sleep 10 #long long time work
  }
rescue Timeout::Error, StandardError
  retry
end

なるほど、こういう事ができるのか。
さすがにしっかり考えられているなぁ

参考 URL