require 'uri'
require 'socket'
Errors = [URI::InvalidURIError, SocketError]
a = lambda { |e=nil|
begin
raise e unless e.nil?
rescue URI::InvalidURIError
puts "alligator"
rescue SocketError
puts "crocodile"
rescue
puts "vulture"
else
puts "rhino"
end }
Now try
a.( Errors[ 0 ] )
a.( Errors[ 1 ] )
a.call
It will behave exactly as you need. If your code above doesn't work, then something else is going on in your program than you think.