在Ruby / Rails中,是否有一个“包罗万象”的rescue
语句,它还允许更具体的rescue
可能性?我试过了
begin
# something
rescue URI::InvalidURIError
# do something
rescue SocketError
# do something else
rescue
# do yet another thing
end
事实证明,即使有URI::InvalidURIError
或SocketError
,它也会进入最后rescue
(即它执行do yet another thing
。)我希望它{{1}分别是{},或do something
。
答案 0 :(得分:0)
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 }
现在尝试
a.( Errors[ 0 ] )
a.( Errors[ 1 ] )
a.call
它将完全按照您的需要运作。如果上面的代码不起作用,那么程序中的其他内容将超出您的想象。