捕获机械化404 =>网:: HTTPNotFound

时间:2011-05-08 09:14:00

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

我编写了一个处理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

表示此异常被第二个救援区捕获。可能是什么原因?

1 个答案:

答案 0 :(得分:19)

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'是引发的异常。