Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | 例外 | 例外の捕捉

概要

例外の捕捉

詳細

・例外の指定を省略すると標準エラーを補足します
・例外の指定は複数列挙可能
・補足した例外は「$!」で参照可能

サンプルコード

# encoding: Windows-31J
require "pp"

def print_eval(str, binding=nil)
  print "\(#{str}\) => "
  puts eval(str, binding)
end

def divide_number(number,divide)
  begin # Javaのtryと同様
    puts "input (#{number},#{divide})"
    number/divide
  rescue TypeError,ZeroDivisionError
    print_eval("$!", binding)
    "unknown"
  rescue # 省略すると標準エラー全般を補足する
    print_eval("$!", binding)
    "unknown"
  end
end

puts "4/2=#{divide_number(4,2)}"
puts "--------------------------------------------------"
puts "4/a=#{divide_number(4,"a")}"
puts "4/a=#{divide_number(4,0)}"
puts "4/a=#{divide_number(nil,nil)}"

出力

input (4,2)
4/2=2
--------------------------------------------------
input (4,a)
($!) => String can't be coerced into Fixnum
4/a=unknown
input (4,0)
($!) => divided by 0
4/a=unknown
input (,)
($!) => undefined method `/' for nil:NilClass
4/a=unknown