我正在使用CampaignMonitor's API与ruby wrapper (createsend-ruby)进行交互,我只是想知道您对错误/异常处理的建议。我正在考虑如下使用begin / rescue / end,但我只是想知道是否有更好的技术来处理这类事情(当你处理第三方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
或者这只是个人偏好和/或应用程序要求的问题?
感谢您的时间!
答案 0 :(得分:8)
我通常从一个例外开始捕捉它们并从那里开始。如果有一个特定的错误经常出现或者需要以不同的方式处理,那么只需在另一个上面添加另一个救援块,以便在那里捕获异常。你做对了:)
尽可能避免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