1

我有很多类继承了 Page 类。它们共享相同的update_ended方法,在页面结束时尝试更新状态。

由于这些 Page 类面临不同的问题,因此混合使用了不同的 net/http 代理,包括 OpenURI、Net::HTTP 和 Mechanize。

  def update_ended
    fetch_page(...) 
  rescue OpenURI::HTTPError, Net::HTTPNotFound, Mechanize::ResponseCodeError
    self.ended = true
    ...
    self.save!
  end

我想捕获404 page not found 异常并结束 Page 对象。目前我的实现还不够细,无法做到这一点。不同的异常有不同的方式来告诉它是什么样的 HTTP 状态。

在我上面的例子中,从各种 HTTP 错误实现中确定代码(例如 404)的最佳方法是什么?我是使用多个救援还是救援中有很多 if 语句?

4

1 回答 1

2

可能最简单的方法是捕获所有内容并查看消息:

def update_ended
    fetch_page(...) 
rescue Exception => e
    case e.message
        when /404/ then puts '404!'
        when /500/ then puts '500!'
        else puts 'IDK!'
    end
end
于 2012-02-07T08:37:27.853 回答