我有一段代码看起来像这样:
def create_page_object(url)
begin
page = Nokogiri::HTML(open(url))
rescue
puts "page not loaded"
end
end
然后我通过以下方式调用它:
result.each do |url|
page = create_page_object(url)
content = make_content(page)
end
现在,在终端中,我看到“页面未加载”,然后Ruby炸毁了我。我怎么说:“如果页面未加载,请停止并转到下一个项目”。
更新:
科学的爆炸定义:
test.rb:70:in `get_title': undefined method `xpath' for nil:NilClass (NoMethodError)
from test.rb:40:in `block (2 levels) in process'
from test.rb:35:in `each'
from test.rb:35:in `block in process'
from test.rb:32:in `upto'
from test.rb:32:in `process'
from test.rb:138:in `<main>'
我相信正在发生的原因是因为尚未加载,没有设置页面变量,该变量为nil并被放入make_content函数中。
最佳答案
救援块返回puts
(即nil
)的输出,在使用该文档之前,必须确保已拥有文档。还要注意,在救援中,您应该显式返回nil
,以弄清楚该分支中返回的方法是什么。我会写:
def create_page_object(url)
begin
page = Nokogiri::HTML(open(url))
rescue
puts "page not loaded"
nil
end
end
result.each do |url|
if (page = create_page_object(url))
content = make_content(page)
end
end
我不知道您的特定需求,但是进行“抢先式”救援通常不是一个好主意。当您有需要做的事情时进行营救,否则将阻止更高级别的工作。
关于ruby - Ruby中正确的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362830/