Ruby でアプリケーション例外をつくるときの作り方。
begin
# 通常の処理
rescue SomeErrorException => e
# Exception から継承したクラスや StandardError から継承したクラスを指定で受ける
rescue => e # StandardError
# 継承木に StandardError がいるクラスのみひっかかる
else
# 例外が起きなかったときの処理
end基本的には、
StandardErrorは例外クラス指定なしのrescueで受けられる。Exceptionから継承すると、例外クラス指定なしのrescueで受けられないので個別指定で受ける。受け漏れると、Exceptionと同様に実行時エラーで失敗する。- 例外指定なしの
raiseではRuntimeErrorが発生する。RuntimeErrorはStandardErrorのサブクラス。
ことから、StandardError を継承して定義するのがよい。Exception を継承し、StandardError を継承しないのは、NoMemoryError や SyntaxError などのように握りつぶすと致命的になるような例外なので、アプリケーションエラーでは使用しない (するなら、同等の致命的な復旧不可能のエラーの場合のみとする) 。