2011-05-08 15 views
12

me escribió función simple que maneja ir a buscar de la url:Mechanize 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 

El problema es que, a pesar de que estoy poniendo al Net::HTTPNotFound en mi primer bloque de rescate, todavía veo en mi registro registra como:

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

que significa que esta excepción fue capturada por el segundo bloque de rescate. Cuál podría ser la razón para eso?

Respuesta

18

Mechanize genera un Mechanize :: ResponseCodeError para un 404 y no un Net :: HTTPNotFound. Los to_s en Mechanize :: ResponseCodeError se ve así:

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

Esto devuelve '404 => Net :: HTTPNotFound', que hace que parezca que esta es la excepción que se plantea.

Cuestiones relacionadas