【问题标题】:Catching Mechanize 404 => Net::HTTPNotFound捕获 Mechanize 404 => Net::HTTPNotFound
【发布时间】:2011-05-08 09:14:00
【问题描述】:

我编写了处理 url 获取的简单函数:

def tender_page_get url, agent
  sleep(rand(6)+2)
  begin
    return agent.get(url).parser
  rescue Errno::ETIMEDOUT, Timeout::Error, Net::HTTPNotFound
    EYE.debug "--winter sleep #{url}"
    puts "-x-#{url}"
    sleep(300)
    tender_page_get url, agent
  rescue => e
    puts "-x-#{url}"
    EYE.debug "--unknown exception"
    EYE.debug "#{url} #{e.inspect}"
  end
end

问题是,即使我在第一个救援块中捕获了Net::HTTPNotFound,我仍然在我的日志记录中看到:

--unknown exception
{url} 404 => Net::HTTPNotFound

这意味着这个异常被第二个救援块捕获。这可能是什么原因?

【问题讨论】:

    标签: ruby http-status-code-404 mechanize-ruby


    【解决方案1】:

    Mechanize 为 404 而不是 Net::HTTPNotFound 引发 Mechanize::ResponseCodeError。 Mechanize::ResponseCodeError 上的 to_s 如下所示:

    def to_s
      "#{response_code} => #{Net::HTTPResponse::CODE_TO_OBJ[response_code]}"
    end
    

    这会返回 '404 => Net::HTTPNotFound' 这看起来像是引发了异常。

    【讨论】:

    • 在这种情况下,我们是否有可以捕获 HTTP 404 的特定字符串?抱歉,我是 ruby​​ 的初学者,从您解释问题原因的回复中,我无法找到解决方案。
    猜你喜欢
    • 2022-01-02
    • 2016-04-17
    • 2018-06-08
    • 2014-04-29
    • 2021-02-13
    • 2011-09-07
    • 1970-01-01
    • 2015-12-27
    • 2012-11-12
    相关资源
    最近更新 更多