1.例外処理 ー resque ー
begin
|#例外が発生するであろう処理
rescue
|#例外が発生したときの処理
end
もとの処理
puts "金額を入力してください"
bill = gets.to_i
puts "割り勘する人数を入れてください"
number = gets.to_i
warikan = bill / number
puts "一人あたり#{warikan}円です"
例外処理Ver.
puts "金額を入力してください"
bill = gets.to_i
puts "割り勘する人数を入れてください"
number = gets.to_i
begin
warikan = bill / number
puts "一人あたり#{warikan}円です"
rescue ZeroDivisionError
puts "0人で割るつもりですか?"
end
例外処理Ver.2
def warikan(bill, number)
warikan = bill / number
puts "一人あたり#{warikan}円です"
rescue ZeroDivisionError
puts "0人で割るつもりですか?"
end
warikan(100, 4)
warikan(100, 0)
エラー情報の獲得
#--------ruby_rescue.rb--------------
def cat(filename)
File.open(filename) do |file|
file.each_line {|line| puts line}
end
rescue SystemCallError => e
puts "例外が発生しました"
puts "例外クラス#{e.class}"
puts "例外メッセージ#{e.message}"
end
filename = ARGV.first
cat(filename)
#----------Ruby_dea1.rb----------------
"ふぁいるのないよう"
<コマンドプロント>
$ruby ruby_rescue.rb Ruby_def1.rb
=> "ふぁいるのないよう"
$ruby ruby_rescue.rb Ruby_XXX.rb
例外が発生しました
例外クラスErrno::ENOENT
例外メッセージNo such file or directory @ rb_sysopen - Ruby_XXX.rb
2.例外を発生させる ー raiseメソッド ー
raise "例外メッセージ"#メッセージは任意で何でもかける
3.例外の有無に関わらず、必ず処理を実行する
begin
|#例外が発生するであろう処理
rescue
|#例外が発生したときの処理
ensure
|#例外があったとしても無かったとしても実行する処理
end
def type(age)
if age < 0
raise "年齢がマイナスです#{age}歳"
elseif age < 20
"未成年"
else
"成年"
end
end
begin
age = ARGV.first.to_i#コマンドラインの引数を整数に変換して「age」に格納する
type = type(age)
puts "#{age}歳は#{type}です"
rescue => e
puts "例外が発生しました:#{e.message}"
ensure
puts "ご利用ありがとうございました"
end
$ ruby ruby_rescue.rb 20
20歳は成年です
ご利用ありがとうございました
$ ruby ruby_rescue.rb -5
例外が発生しました:年齢がマイナスです-5歳
ご利用ありがとうございました#----------- 例外が発生しても実行される ---------------------