masuidriveさんに聞いた、知らないとハマりそうなこと。
error_type が省略された時は StandardError のサブクラスであ る全ての例外を捕捉します。Rubyの組み込み例外は(SystemExit や Interrupt のような脱出を目的としたものを除いて) StandardError のサブクラスです。
[ref.] 組み込みクラス/モジュール/例外クラスの例外クラス
class SomethingBad < Exception; end
begin
raise SomethingBad.new("なにか悪いこと")
rescue SomethingBad
p $!
end
ならちゃんとrescueされるけど、
class SomethingBad < Exception; end
begin
raise SomethingBad.new("なにか悪いこと")
rescue
p $!
end
だとスルーされてしまう。
Exceptionて名前にだまされるなよってことだ。
Javaの感覚があると、Exceptionの下にErrorがあるって変な感じがする。
class SomethingBad < StandardError; end
begin
raise SomethingBad.new("なにか悪いこと")
rescue
p $!
end
ならよし、と。