为什么要救出一个例外,然后再提出一个

Cat*_*ish 2 ruby exception-handling ruby-on-rails

我正在查看mandrill文档中的ruby api调用https://mandrillapp.com/api/docs/users.ruby.html#method=ping并且我注意到他们拯救了Mandrill::Error然后raise另一个例外.

我很好奇为什么有人会抓到一个例外,然后再提出另一个例外.这对我来说没有意义.

begin
    mandrill = Mandrill::API.new 'YOUR_API_KEY'
    result = mandrill.users.ping 
        # {"PING"=>"PONG!"}

rescue Mandrill::Error => e
    # Mandrill errors are thrown as exceptions
    puts "A mandrill error occurred: #{e.class} - #{e.message}"
    # A mandrill error occurred: Mandrill::InvalidKeyError - Invalid API key    
    raise
end
Run Code Online (Sandbox Code Playgroud)

Mar*_*cny 8

rescue Mandrill::Error => e
    # Mandrill errors are thrown as exceptions
    puts "A mandrill error occurred: #{e.class} - #{e.message}"
    # A mandrill error occurred: Mandrill::InvalidKeyError - Invalid API key    
    raise
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,同样的例外被"重新提出".此rescue块的唯一原因是记录有关异常的特定信息.

begin/rescue当异常具有特殊意义时,通常以这种方式使用块,因此作者希望打印/记录异常信息.当下一个rescue块没有打印任何异常信息而是静默处理它时,尤其如此.