ruby - Ruby中正确的错误处理

标签 ruby error-handling nokogiri

我有一段代码看起来像这样:

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/

相关文章:

ruby - RJB + 乘客。 RJB出现不调用Java

cakephp - cakephp添加输入错误 Controller

ruby-on-rails - 为什么 Controller 操作应该调用一个模型方法而不是初始查找或新方法?

Ruby 无法打开文件 ( Errno::ENOENT ) 但可以从 IRB 打开相同的路径

python - 在使用 python 进行 GUI 自动化期间鼠标未单击

ruby-on-rails - 在小牛 osx 上安装 xcode 后,Nokogiri 缺少 libxml2

ruby - Nokogiri 安装失败 : iconv doesn't work [osx]

ruby - 使用nokogiri从youtube抓取网页

ruby - 在 Rails 3 应用程序中调用 .ajax 方法时出现 401 Unauthorized

swift - 使用 Xcode 捕获 Swift 代码中的崩溃