如何解决Ruby-执行已过期
| 我有这样的红宝石代码:begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error \"Error: #{ex}\"
end
我得到的日志为:
ERROR -- : Error: execution expired
我希望块重新执行直到成功。
我该怎么做?
解决方法
我将对我的评论进行一些扩展。您可以使用
retry
返回到begin
:
begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error \"Error: #{ex}\"
retry
end
它将一直尝试(并记录错误),直到它起作用或您手动将其杀死。那可能不是您想要的,尽管一个小错误会使您陷入无限循环。一种简单的解决方法是让它尝试10次,然后放弃:
MAX_ATTEMPTS = 10
doc = nil
begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error \"Error: #{ex}\"
attempts = attempts + 1
retry if(attempts < MAX_ATTEMPTS)
end
if(doc.nil?)
# Do something about the persistent error
# so that you don\'t try to access a nil
# doc later on.
end
这样的尝试将尝试几次,然后放弃。如果您想在下一次尝试之前稍等一下或调查异常(可能有多个rescue
块)以选择是否应立即放弃,等待并重试,或立即重试,也可以在retry
之前放置sleep
呼叫。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。