基本の「き」
begin <<例外が起こる可能性のある処理>> rescue => <<例外オブジェクトが代入される変数>> <<例外が発生したときの処理>> else <<例外が発生しなかったときに実行される処理>> ensure <<例外の発生有無に関わらず最後に必ず実行する処理>> end
例
begin num = 10 / 0 rescue => e p "#{e.class} : #{e.message}" else p num ensure p "実行しました" end
実行結果
"ZeroDivisionError : divided by 0" "実行しました"
例外ごとに処理を変更する
begin # num = 10 / "a" num = 10 / 0 rescue ZeroDivisionError p "ゼロで割ろうとしたぞい" rescue TypeError p "型でエラーだぞい" rescue => e p "#{e.class} : #{e.message}" end
実行結果
"ゼロで割ろうとしたぞい"
例外処理の後に処理をやり直す
rescue
の中にretry
を入れる
num = 0 begin sum = 10 / num rescue num += 1 retry else p num ensure p "実行しました" end
実行結果
1 "実行しました"