如何在自己的方法中处理异常而不是这个呢?
items.each do |item|
begin
url = item.url
page = Nokogiri::HTML(open(url).read)
rescue Exception => e
puts "Couldn't read \"#{ url }\": #{ e }"
else
title = get_title(page)
end
end
类似的东西:
def get_page(url)
begin
Nokogiri::HTML(open(url).read)
rescue Exception => e
puts "Couldn't read \"#{ url }\": #{ e }"
end
end
#and then call:
items.each do |item|
get_page(url)
title = get_title(page)
end
我应该在哪里放置else
条款?
答案 0 :(得分:1)
首先,你几乎不想从Exception
拯救。而是从StandardError
(或特定错误)中解救。 Exception
是StandardError
的祖先,包含最有可能无法恢复的错误(例如,内存不足错误,语法错误)。
您可以使用
rescue => e
拯救标准错误或
rescue StandardError => e
任何类型的Nokogiri解析错误都应该从StandardError
继承。 Net / HTTP有点问题。请参阅“What’s the best way to handle exceptions from Net::HTTP?”,但您可以单独拯救它们。
现在回答你的问题。您可以从nil
方法返回get_page
,并在获取标题之前检查get_page
的结果是否为nil
:
def get_page(url)
Nokogiri::HTML(open(url).read)
rescue => e
puts "Couldn't read \"#{ url }\": #{ e }"
nil
end
items.each do |item|
url = item.url
page = get_page(url)
if page
title = get_title(page)
end
end