2013-08-16 46 views
8

Tôi đang sử dụng Nokogiri để xóa các trang web. Rất ít url cần được đoán và trả về lỗi 404 không tìm thấy khi chúng không tồn tại. Có cách nào để nắm bắt ngoại lệ này không?Cách xử lý lỗi không tìm thấy 404 trong Nokogiri

http://yoursite/page/38475 #=> page number 38475 doesn't exist 

Tôi đã thử cách sau không hoạt động.

url = "http://yoursite/page/38475" 
doc = Nokogiri::HTML(open(url)) do 
    begin 
    rescue Exception => e 
     puts "Try again later" 
    end 
end 

Trả lời

18

Nó không làm việc, bởi vì bạn không được giải cứu một phần của mã (nó open(url) cuộc gọi) mà đặt ra một lỗi trong trường hợp của việc tìm kiếm trạng thái 404. Các mã sau đây nên làm việc:

url = 'http://yoursite/page/38475' 
begin 
    file = open(url) 
    doc = Nokogiri::HTML(file) do 
    # handle doc 
    end 
rescue OpenURI::HTTPError => e 
    if e.message == '404 Not Found' 
    # handle 404 error 
    else 
    raise e 
    end 
end 

BTW, về cứu Exception: Why is it a bad style to `rescue Exception => e` in Ruby?

+0

tôi điều là tốt hơn để sử dụng 'e.io.not_found ' – Calin

Các vấn đề liên quan