Ruby 捕捉机械化404=>;Net::HTTPNotFound
我编写了一个简单的函数来处理url的获取:Ruby 捕捉机械化404=>;Net::HTTPNotFound,ruby,http-status-code-404,mechanize-ruby,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)
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
问题是,即使我在第一个rescue块中捕获了Net::HTTPNotFound
,我仍然在日志记录中看到如下内容:
--unknown exception
{url} 404 => Net::HTTPNotFound
这意味着这个异常被第二个救援模块捕获。原因可能是什么?Mechanize为404而不是Net::HTTPNotFound引发Mechanize::ResponseCodeError。Mechanize::ResponseCodeError上的收件人如下所示:
def to_s
"#{response_code} => #{Net::HTTPResponse::CODE_TO_OBJ[response_code]}"
end
这将返回'404=>Net::HTTPNotFound',这使它看起来像是引发的异常。在这种情况下,我们是否可以为HTTP 404捕获特定字符串?对不起,我是ruby的初学者,从您解释问题原因的回复来看,我无法找到解决方案。