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

1begin
2  require "hogehoge"
3rescue
4  puts "LoadError!"
5  puts "Install hogehoge gem before running this code."
6  exit
7end
8
9# do something

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

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

1begin
2  require "hogehoge"
3rescue LoadError
4  puts "LoadError!"
5  puts "Install hogehoge gem before running this code."
6  exit
7end
8
9# do something