本文へスキップ
BecomeCoder

Rubyのエラー · エラー12

StandardError ― rescueで例外の種類を絞りすぎて捕まえ損ねる

rescue は指定しないと StandardError とそのサブクラスしか捕まえません。特定の例外クラスだけを指定した rescue に、それとは別系統の例外が飛んでくると、そこでは捕まらずプログラムが止まります。「一応 begin/rescue で囲んだのにエラーが止まらない」という初心者のはまりどころです。

出るコード

begin
  1 / 0
rescue TypeError   # 実際に起きるのは ZeroDivisionError なので捕まらない
  puts "型エラーです"
end

エラーメッセージ

divided by 0 (ZeroDivisionError)

直し方

実際に発生する例外クラスを rescue に正しく指定します。広く受け止めたいなら rescue StandardError => e とし、e.classe.message で原因を確認できるようにします。

begin
  1 / 0
rescue ZeroDivisionError => e
  puts "計算エラー: #{e.message}"
end