rescueが補足してくれるもの。

masuidriveさんに聞いた、知らないとハマりそうなこと。

Rubyリファレンスマニュアル – 制御構造

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

ならよし、と。

タイトルとURLをコピーしました