errors/rescue_scope/bare_rescue.rb

tests/_examples/errors/rescue_scope/bare_rescue.rb in the metorex repository.

def caught_by_bare_rescue
  yield
  :nothing_raised
rescue
  :caught
end

puts caught_by_bare_rescue { raise StandardError }
puts caught_by_bare_rescue { raise RuntimeError }
puts caught_by_bare_rescue { raise ArgumentError }

class OwnError < StandardError
end

puts caught_by_bare_rescue { raise OwnError }

module Nested
  class DeepError < StandardError
  end
end

puts caught_by_bare_rescue { raise Nested::DeepError }

anonymous = Class.new StandardError
puts caught_by_bare_rescue { raise anonymous }

begin
  caught_by_bare_rescue { raise Exception }
rescue Exception => error
  puts error.class
end

begin
  begin; raise Exception; rescue; end
  puts :unreachable
rescue Exception => error
  puts "passed the bare rescue"
end

Output:

caught
caught
caught
caught
caught
caught
Exception
passed the bare rescue