Rubyちゃんこんにちわ

子育てエンジニアが綴る

rescue => e で Exception を拾う方法

1
2
3
4
5
begin
  raise Exception.new('exception')
rescue => e
  puts 'do not reach'
end

こういうコードを何度か見たのでブログにも書いておこう。
Rubyのrescueで例外の型を指定しない場合は、StandardErrorとして扱われます。
例外の継承関係は少し古いですが、こちらにある通りです。
大枠はこれで理解できるようにStandardErrorの親クラスとしてExceptionが存在します。
よって上記のコードではExceptionが拾われることはありません。

Exceptionクラスも拾いたい場合は、rescue Exception => e のように Exception クラスを指定する必要があります。

サンプル

結構皆さんいろいろ書いていた。。。でも途中まで書いたので一応アップします。

rescue節で例外の型を指定しない場合に補足できるのはStandardErrorとそのサブクラスだけ
例外処理 Ruby - Wikipedia