【问题标题】:Handling different classes of 404 errors处理不同类别的 404 错误
【发布时间】:2012-02-28 15:55:20
【问题描述】:

我有很多类继承了 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 语句?

【问题讨论】:

    标签: ruby-on-rails ruby exception-handling mechanize open-uri


    【解决方案1】:

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

    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
    

    【讨论】:

    • 谢谢,让我列出这些错误消息: OpenURI: 404 Not Found Mechanize::ResponseCodeError: 404 => Net::HTTPNotFound Net::HTTP: (一个 HTML with): <b>404.</b> <ins>That\xE2\x80\x99s an error.</ins>\n <p>The requested URL <code>/dasffasafsj</code> was not found on this server.
    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 2013-11-24
    • 1970-01-01
    • 2014-06-15
    • 2016-10-14
    • 2019-08-11
    • 2015-10-31
    • 2015-04-07
    相关资源
    最近更新 更多