コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rubyで違う種類のErrorをrescueで補足して同一処理をやらせたい場合はカンマで区切る

なんかググってもストレートにヒットしなかったのでメモ

環境

$ ruby -v
ruby 2.3.5p376 

やりたいこと

IOErrorRangeError のときだけキャッチして同じ処理してほしいなーとかそういう時にどうやって書くか

答え

IOError, RangeError みたいにカンマで区切ればよい

▼raise_error.rb

def raise_test(arg)
  raise ArgumentError if arg == 1
  raise IOError if arg == 2
  raise RangeError if arg == 3
  p "何も起きてないよ"
rescue ArgumentError
  p "ArgumentErrorだよ"
rescue IOError, RangeError
  p "IOかRangeErrorだよ"
end

raise_test(ARGV[0].to_i)

▼動かしてみた

$ ruby raise_error.rb 0
"何も起きてないよ"
$ ruby raise_error.rb 1
"ArgumentErrorだよ"
$ ruby raise_error.rb 2
"IOかRangeErrorだよ"
$ ruby raise_error.rb 3
"IOかRangeErrorだよ"
$ ruby raise_error.rb 4
"何も起きてないよ"