RubyのStandardErrorとそのサブクラスの理解
Rubyにおける例外処理は、Exception
クラスを基底とする階層構造で成り立っています。その中でも、StandardError
は最も一般的な例外クラスであり、rescue
節で特定の例外クラスを指定しない場合、デフォルトでStandardError
およびそのサブクラスが捕捉されます。
StandardErrorの主なサブクラス一覧
以下は、StandardError
の主なサブクラスです:
ArgumentError
EncodingError
FiberError
-
IOError
EOFError
-
IndexError
KeyError
StopIteration
LocalJumpError
-
NameError
NoMethodError
-
RangeError
FloatDomainError
RegexpError
RuntimeError
-
SystemCallError
-
Errno::*
(システム依存のエラー)
-
ThreadError
TypeError
ZeroDivisionError
これらのエラーは、rescue
節で例外クラスを指定しない場合に捕捉されます。一方、Exception
クラスの他のサブクラス(例:NoMemoryError
、ScriptError
、SystemExit
など)は、明示的に指定しない限り捕捉されません。
StandardErrorを継承しているかの確認方法
Rubyのコンソール(IRBやRailsコンソール)で、特定の例外クラスがStandardError
を継承しているかを確認するには、<
演算子やancestors
メソッドを使用します。
# `<`演算子を使用して確認
ZeroDivisionError < StandardError
# => true
# `ancestors`メソッドを使用して確認
ZeroDivisionError.ancestors.include?(StandardError)
# => true
また、StandardError
のすべてのサブクラスを一覧表示するには、以下のようにします:
# Ruby 2.0以降で使用可能
ObjectSpace.each_object(Class).select { |klass| klass < StandardError }
このコードは、StandardError
を継承しているすべてのクラスを配列として返します。ただし、すべてのクラスが読み込まれているとは限らないため、結果は実行環境によって異なる場合があります。
自分の環境だと使っているgemの例外クラスなどが出てきました。
これらの方法を使用することで、特定の例外クラスがStandardError
を継承しているかどうかを確認できます。