Rubyの例外処理(Exception Handling)とは?エラー発生時の安全な対処法
Rubyでは、実行中に発生する予期せぬエラー(例外)を安全に処理するために、例外処理の仕組みが用意されています。
これにより、プログラムの強制終了を防ぎ、エラーメッセージを制御できます。
基本構文:begin 〜 rescue
begin
# エラーが起こるかもしれない処理
num = 10 / 0
rescue ZeroDivisionError => e
puts "0で割ることはできません!"
puts "エラー内容:#{e.message}"
end
rescue
では、発生した例外の種類(この例では ZeroDivisionError
)を指定し、その例外に対する処理を行います。
複数の例外を扱う
begin
raise IOError.new("ファイルが見つかりません")
rescue ZeroDivisionError
puts "ゼロ割りエラー"
rescue IOError => e
puts "IOエラー:#{e.message}"
rescue => e
puts "その他のエラー:#{e.class}"
end
複数の例外を rescue
で分岐して処理できます。
rescue => e
は、すべての例外のキャッチに使える便利な書き方です。
ensure 節:後始末の処理
begin
puts "処理を開始します"
raise "エラー発生!"
rescue
puts "エラーを処理しました"
ensure
puts "後始末を行います"
end
ensure
節は、例外の有無に関わらず必ず実行される部分です。
ファイルのクローズ処理や接続の切断などに使われます。
raise で例外を発生させる
def divide(a, b)
raise ArgumentError, "0で割ることはできません" if b == 0
a / b
end
begin
puts divide(10, 0)
rescue => e
puts "エラー:#{e.message}"
end
raise
を使えば、自分で例外を発生させることもできます。
主に不正な引数や状態が検出された場合に使います。
rescue 修飾子の省略記法
value = Integer("abc") rescue 0
puts value # → 0
簡単な処理なら、rescue
を後ろに付ける省略記法が便利です。
標準の例外クラス
StandardError
(多くの例外の親)
RuntimeError
(一般的なエラー)
ArgumentError
(引数に関するエラー)
ZeroDivisionError
(0割)
IOError
(入出力関連)
必要に応じて、独自の例外クラスを定義することも可能です。
まとめ
Rubyの例外処理(Exception Handling)は、予期しないエラーに安全に対応するための仕組みです。
begin-rescue
を使って、プログラムの安定性と信頼性を高めましょう。
ensure
で後始末、raise
で意図的にエラー発生、rescue
で個別対応など、例外処理を正しく使い分けることが大切です。