2011-05-08 13 views
12

मैं साधारण समारोह जो यूआरएल को लाना हैंडल ने लिखा है:पकड़ने मशीनीकरण 404 => Net :: HTTPNotFound

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 

जिसका अर्थ है कि यह अपवाद दूसरे बचाव ब्लॉक द्वारा पकड़ा गया था। इसके लिए क्या कारण हो सकता है?

उत्तर

18

मैकेनाइजेशन एक मशीनीकरण = ResponseCodeError को 404 के लिए उठाता है और नेट :: HTTPNotFound नहीं। मशीनीकरण :: ResponseCodeError पर to_s इस तरह दिखता है:

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

यह रिटर्न '404 => Net :: HTTPNotFound' जो यह देखने के लिए की तरह इस अपवाद उठाया जा रहा है बनाता है।

संबंधित मुद्दे