【问题标题】:Do I have to rescue exceptions inside my loop using Ruby?我是否必须使用 Ruby 在循环中拯救异常?
【发布时间】:2013-08-28 14:05:35
【问题描述】:

我对 ruby​​ 的了解越来越多,并编写了一个偶尔会超时的脚本(进行多次 API 调用)。

我知道我需要rescue 例外情况,如下所示:

rescue Timeout::Error => e
  # log #{e} for later, maybe
end

我的问题是我应该把 rescue 块放在哪里。由于我在多个循环中进行多个 API 调用,我是否需要将该块放在每个 API 循环中?我宁愿只写一次rescue 块,例如在脚本的末尾,并让它在脚本的每个循环中工作。我正在使用 ruby​​ 1.9.3。

【问题讨论】:

  • 拿上 Avdi 的书,仔细阅读……
  • 我认为答案是,这取决于您想要定位异常发生的时间/地点的精确程度。例如,如果您想查看指出哪个 API 调用超时的消息,那么您需要为每个 API 调用一个 rescue

标签: ruby exception-handling rescue


【解决方案1】:

这主要取决于您尝试如何处理错误。

例如,如果您希望错误不中止循环运行,则在循环内捕获异常,您可以记录错误并继续下一次迭代。

如果错误是“致命的”并且您不能(或不想)继续循环,则在外面捕获它。

【讨论】:

  • 这是有道理的。我正在通过脚本安排约 10,000 封电子邮件,重要的是所有 10,000 封电子邮件也都发送到他们需要的地方。我想我会在循环之外捕获异常并强制它删除所有预定的电子邮件,然后我可以重新运行脚本以重新安排它们。似乎不是最有效的想法,但现在就足够了。感谢您的帮助!
猜你喜欢
  • 2013-06-28
  • 2017-01-30
  • 2011-06-15
  • 2020-12-15
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2018-11-27
相关资源
最近更新 更多