【发布时间】:2014-06-12 02:37:05
【问题描述】:
我正在查看 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
【问题讨论】:
-
添加额外的调试信息?
-
在这种情况下没有意义:所有记录的信息都在异常中。请注意,same 异常被重新抛出,而不是新异常。
-
如果您需要在举手并说“我不知道如何处理这个问题”之前释放资源,重新抛出通常很有用。但是,在这种情况下,仅仅显示一个错误,其中包含某人可能从即将发生的堆栈跟踪中推断出的信息似乎有点没用。
标签: ruby-on-rails ruby exception-handling