8

我正在使用ruby​​ 包装器 (createsend-ruby)与CampaignMonitor 的 API进行交互, 我只是想知道您在错误/异常处理方面有什么建议。我想只使用 begin/rescue/end 如下,但我只想知道是否有更好的技术来处理这类事情(当你处理 3rd-party API 时)。

begin
  list_id = CreateSend::List.create client_id, title, unsubscribe_page, confirmed_opt_in, confirmation_success_page
rescue Exception => e
  logger.error "[error] CampaignMonitor error: #{e}"
  return false
end

例如,您会尝试捕获特定异常并单独处理它们吗?

rescue CreateSend::BadRequest => e

或者这只是个人偏好和/或应用程序要求的问题?

感谢您的时间!

4

1 回答 1

9

我通常从一个异常开始,将它们全部捕获并从那里开始。如果有一个特定的错误经常出现或需要以不同的方式处理,只需在底部的上方添加另一个救援块,以便在那里捕获异常。你做对了:)

尽可能避免rescue Exception,一个简单rescue的就可以了。

澄清一下,您可以进行任意数量的救援并确保:

begin
  do_something
rescue CS::BadRequest => e
  logger.error "..."
rescue CS::TimeoutError => e
  do_something_that_retries
rescue => e
  logger.error "..."
ensure
  send_email_to_admin
end
于 2012-06-14T19:35:07.723 回答