はじめに
PythonやJavaでは一括でエラーをキャッチする際に、Exceptionクラスでキャッチしてしまいます。
ところが、RubyではExceptionではなくStandardErrorでキャッチするのが通常のようです。
StandardError で捕捉されるエラー
サンプルコード
begin
raise NoMethodError
rescue StandardError => e
puts "#{e.class} is a StandardError"
rescue Exception => e
puts "#{e.class} is a Exception"
end
実行結果
NoMethodError is a StandardError
さらに、キャッチするエラーを明示的に指定しない場合もStandardErrorが捕捉されます。
サンプルコード
begin
raise NoMemoryError
rescue => e
puts "#{e.class} is a StandardError"
rescue Exception => e
puts "#{e.class} is a Exception"
end
実行結果
NoMethodError is a StandardError
Exceptionで捕捉されるエラー
サンプルコード
begin
raise NoMemoryError
rescue StandardError => e
puts "#{e.class} is a StandardError"
rescue Exception => e
puts "#{e.class} is a Exception"
end
実行結果
NoMemoryError is a Exception