errors/rescue_lists_of_expressions.rb

tests/_examples/errors/rescue_lists_of_expressions.rb in the metorex repository.

# A rescue list holds expressions as well as names: a ternary, a group, a
# local holding a class, and a name written on a line of its own after a
# comment. Each is read where the clause is reached.
def report
  yield
rescue ArgumentError,
       # a class chosen while the program runs
       defined?(Missing) ? Missing : IOError,
       KeyError => error
  puts("caught #{error.class}")
end

report { raise(IOError) }
report { raise(KeyError) }

chosen = TypeError
begin
  raise(TypeError, "held in a local")
rescue (true ? chosen : IOError) => error
  puts(error.message)
end

begin
  raise(ZeroDivisionError)
rescue IOError, chosen
  puts("not this one")
rescue
  puts("bare rescue")
end

begin; raise(IOError); rescue; puts("rescued on one line"); end

Output:

caught IOError
caught KeyError
held in a local
bare rescue
rescued on one line