From: pegacorn Date: 2008-02-22T17:44:55+09:00 Subject: [ruby-list:44683] Re: beginで捉えられないエラー?? pegacorn です。 何度か同じような質問を見た気がしますが…(そして答えた気が…) 08/02/22 に Kabu and Ruby管理人 さんは書きました: > 全体をbegin ... rescue ... endで括ったりしたのですが、やはりエラーが出てしまいます。 > ライブラリからのエラーのようですが、どういう意味でしょうか? とほほ、、。 > > > c:/ruby/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill': execution expired > (Timeout::E > rror) > from c:/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout' > from c:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout' > from c:/ruby/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill' > コードはこんな感じです。 > begin > f = open( yahoourl ) > rescue > puts 'タイムアウトです。再試行します。' > retry > end Timeout::Error は StandardError のサブクラスではないので、error_type を省略した rescue では捕捉できません。 制御構造 - Rubyリファレンスマニュアル: >http://www.ruby-lang.org/ja/man/html/_C0A9B8E6B9BDC2A4.html#begin> error_type が省略された時は StandardError のサブクラスであ る全ての例外を捕捉します。 << timeout.rb: >|| module Timeout class Error