例外処理とは、、?
例外処理とは、エラーがでたときの処理を行うことです。
エラー原因の特定やシステム側で不具合を起こさないためにも例外処理を書けば便利です。
例外処理の書き方
####begin,rescueの基本形
エラーの対象となりそうな箇所をbeginで囲い、エラーが発生した場合の処理をrescueの中に書く。
begin
100 / 0
rescue
p "0で割れません"
end
puts "おはようございます"
####ワンライナーで書く
ワンライナーで書くことも可能です。
sample_1 = 10 / 0 rescue 0
sample_2 = 10 / nil rescue 0
puts sample_1 #=>0
puts sample_2 #=>0
####エラー内容を取得する(e)
また、rescueの後に引数を指定してあげて、変数の中にエラー内容を格納できます。
begin
10 / 0
rescue => e
puts e #=> divided by 0
end
####エラーごとに条件分岐する
他にも、rescueの後にエラーメッセージを指定することで、
どのエラーが出た時にどの処理をするか,というのを条件分岐ができます。
begin
10 / 0
rescue NoMethodError
puts "メソッドはありません"
rescue ZeroDivisionError
puts "0で割れません"
end
####raiseの使い方
パラメータが想定されたものではない時や、不正なアクセスがきたといった場合に、明示的にエラーを発生させ、処理を中断させたいときに使います。
begin
raise NoMethodError # 発生させたい例外のクラス
rescue => e
puts e
end
エラーメッセージを出力することも可能です。
begin
raise RuntimeError, "実行時エラーです"
rescue => e
puts e
end
####retryの使い方
エラーが起きても、再度beginに戻って実行することができます。
num = 0
begin
puts 10 / num
rescue ZeroDivisionError => e
puts e
num = 1
retry #beginブロックを再度実行
end
puts "終了しました"
####ensureの使い方
例外が発生してもしなくても実行される処理を書くことができる。
begin
puts "例外なし"
rescue => e
puts e
ensure
puts "ここは絶対実行する!"
end