PIYO - Tech & Life -

RubyでLoadErrorをキャッチする

requireが失敗したときに発生するLoadError例外をキャッチすべくこのようなコードを書いたが、うまくいかなかった。

begin
  require "hogehoge"
rescue
  puts "LoadError!"
  puts "Install hogehoge gem before running this code."
  exit
end

# do something

どうやらrescue節に何も指定しなかった場合、StandardErrorの例外のみをキャッチするらしい。LoadErrorScriptErrorのサブクラスであり、StandardErrorとは異なる継承ツリーにいる。

先ほどのコードを次のように変更すればLoadErrorをキャッチできるようになるというわけ。

begin
  require "hogehoge"
rescue LoadError
  puts "LoadError!"
  puts "Install hogehoge gem before running this code."
  exit
end

# do something