Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 捕捉机械化404=>;Net::HTTPNotFound_Ruby_Http Status Code 404_Mechanize Ruby - Fatal编程技术网

Ruby 捕捉机械化404=>;Net::HTTPNotFound

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)

我编写了一个简单的函数来处理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
问题是,即使我在第一个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的初学者,从您解释问题原因的回复来看,我无法找到解决方案。