Rubyのbegin-rescue-end構文とは?エラーを安全に処理する基本構文
Rubyで例外処理を行う基本的な書き方が「begin-rescue-end構文」です。
これにより、プログラムの途中でエラーが発生しても、処理を止めずに対応できます。
基本構文
begin
# エラーが発生するかもしれない処理
rescue
# エラー発生時の処理
end
例:
begin
result = 10 / 0
rescue
puts "0で割ることはできません"
end
この例では、0で割ると ZeroDivisionError
が発生しますが、rescue
により安全に処理できます。
例外クラスの指定
begin
File.open("missing.txt")
rescue Errno::ENOENT
puts "ファイルが見つかりませんでした"
end
rescue
に例外クラスを指定することで、特定のエラーだけに反応できます。
例外情報を取得する
begin
1 / 0
rescue ZeroDivisionError => e
puts "エラー内容:#{e.message}"
puts "エラークラス:#{e.class}"
end
=> e
を使えば、発生した例外オブジェクトにアクセスできます。
複数のrescue節
begin
raise IOError, "IOの問題発生"
rescue ZeroDivisionError
puts "ゼロで割った"
rescue IOError
puts "IOエラーが発生"
rescue => e
puts "その他のエラー:#{e.class}"
end
複数の例外クラスを rescue
で分けて対応できます。
最後の rescue => e
は、どの例外にも対応可能な「キャッチオール」として使われます。
ensure節と組み合わせる
begin
puts "処理開始"
raise "何かのエラー"
rescue
puts "エラー処理中"
ensure
puts "終了処理を実行"
end
ensure
は、エラーの有無に関係なく必ず実行される部分です。
後始末やログ出力などに適しています。
rescue節の省略記法
value = Integer("abc") rescue 0
puts value # → 0
簡単な処理には、rescue を後置して1行で書くこともできます。
まとめ
Rubyのbegin-rescue-end構文は、プログラム実行時のエラー(例外)に柔軟に対応する基本構文です。
rescue
を使って特定のエラーに対応し、ensure
で後始末も行えます。
エラー発生の可能性がある処理には、例外処理を組み合わせて安全で安定したコードを心がけましょう!