Ruby例外クラス階層徹底
例外クラスの基本
Ruby実践において、例外クラスはエラー処理の中心です。例外は raise で発生させ、begin…rescue…end で捕捉します。例外クラスは Exception を継承し、さらに StandardError を継承したクラスが一般的に使用されます。StandardError は RuntimeError、NoMethodError、TypeError などの標準例外を含む親クラスです。
例外クラスの継承関係は階層構造で表され、Exception → StandardError → RuntimeError のように段階的に細分化されます。これにより、特定のエラーだけを捕捉したり、すべての標準例外をまとめて処理したりできます。
標準例外の階層構造
Rubyの標準例外は以下のように階層化されています。
Exception
├─ StandardError
│ ├─ RuntimeError
│ ├─ NoMethodError
│ ├─ TypeError
│ └─ ・・・
この構造を理解すると、rescue RuntimeError で実行時エラーだけを捕捉し、rescue StandardError で全ての標準例外を捕捉できます。Exception を直接捕捉すると、システム例外(SystemExit など)まで含まれるため、通常は避けるべきです。
カスタム例外の作り方
独自のエラー処理を行いたい場合は、カスタム例外クラスを作成します。カスタム例外は StandardError を継承し、必要に応じてメソッドや属性を追加します。
class MyCustomError < StandardError
attr_reader :detail
def initialize(message = "カスタムエラーが発生しました", detail = nil)
super(message)
@detail = detail
end
end
begin
raise MyCustomError.new("失敗しました", {code: 123})
rescue MyCustomError => e
puts e.message # 失敗しました
puts e.detail[:code] # 123
end
このように継承と階層構造を活用することで、エラーの種類を明確にし、適切な処理を実装できます。Ruby実践では、例外クラスを正しく設計し、エラー処理を堅牢にすることが重要です。
コメント
コメントを投稿