Rubyのrescueは子メソッド内のエラーも拾ってくれる

Ruby on Rails

Ruby(Rails)の例外処理としてrescueがあります

よくあるのはこんな感じのです

def index
  1/0
rescue
  p "例外だよ〜"
end

【実行結果】

> “例外だよ〜"

まー、これはわかりますよね

ところで、以下のようにindex内で呼び出すメソッド内でエラーが発生した場合はどうなるのでしょうか?

def index
  hoge
rescue
  p "例外だよ〜"
end
 
def hoge
  1/0
end

【実行結果】

> “例外だよ〜"

結果から言うと、この場合でもちゃんとhogeメソッド内のエラーを拾って処理してくれます

では、この場合は?

def index
  hoge
rescue
  p "例外だよ〜"
end
 
def hoge
  1/0
rescue
  p "hogeの例外だよ〜"
end

【実行結果】

> “hogeの例外だよ〜"

hogeメソッド内のrescueで拾われるので、indexメソッド内のrescueには入りません