From: Nobuyoshi Nakada Date: 2013-09-05T16:31:39+09:00 Subject: [ruby-core:57036] Re: [ruby-trunk - Bug #8730] "rescue Exception" rescues Timeout::ExitException (13/09/05 0:25), KOSAKI Motohiro wrote: >>> 次に出てくるのは逆に、デーモンなどで全部捕まえたいケースで、rescue Timeout::Error, StandardError =>e >>> と書きましょう(書いている)という記述 http://d.hatena.ne.jp/dreammind/20090217/1234813224 >>> >>> 2番めは動かなくなりますよね。 >> >> Timeout.timeoutから抜けるときには(指定がなければ)Timeout::Errorを投げるので、影響はないですね。 > > いや、それは blogの誤記だと思いますよ。StandardErrorで捕まえられないエラーがあるからコード変えたという記事なので。 そのblogにあるコードでは、timeoutが発生するのはnet/httpの中、捕まえるのは外なので、今回の変更による影響はないということです。 StandardErrorで捕まえられるか否かはこれとはまた別件です。 > それに Exception で捕まえてしまうと、SignalExceptionとかも食ってしまうので > 一端は捕まえるけど、(ログを吐くなどした後)もう一度raiseするというコードを > 書いてない限りは、どの道遅かれ早かれプログラムは誤動作するので、 > この修正では問題は解決してないのです。 > > なので、副作用のほうが気になるわけです。 Exceptionで丸ごと握りつぶしてしまうのがまずいことはまったく同意ですが、完全ではないにせよそれを避けられるほうがいいのではないでしょうか。