エラー回避 rescue
rescueを使うことによって、エラーを回避して処理ができる
beginとrescueの間で実行する処理で何らかのエラーが発生しても処理を中断しないようになる
begin 例外を発生させる可能性のある処理 rescue 例外が起こった場合の処理 end
rescueに続けて変数名を指定、上がってきた例外が指定した変数に代入される
begin 例外が起こる可能性のある処理 rescue => 例外オブジェクトが代入される変数 例外が起こった場合の処理 end
raiseで意図的に例外を発生させてみる
raiceは検証に便利
数に型を渡さないと、 RuntimeErrorを発生させる
RuntimeError : 特定の例外クラスには該当しないエラー
begin raise rescue => e p "error" end
結果
"error"
rescueのあとにクラスを指定すると、その例外のときのみ処理を中断しないようになる
begin raise StandardError rescue StandardError => e p "StandardErrorが発生していますが処理は中断していません" end
結果
"StandardErrorが発生していますが処理は中断していません"
指定した以外のエラーが発生すると
begin raise ArgumentError rescue ZeroDivisionError => e p "ZeroDivisionErrorが発生していますが処理は中断していません" end
結果
csv_test.rb:2:in `<main>': ArgumentError (ArgumentError)||<
例外オブジェクトからメソッドを呼んで、例外に関する情報を取得できる。
class ... 例外の種類
message ... 例外のメッセージ
backtrace ... 例外の発生した位置に関する情報($@ = $!.backtrace)
begin raise StandardError rescue StandardError => e p "StandardErrorが発生していますが処理は中断していません" p e.class end
"StandardErrorが発生していますが処理は中断していません" StandardError