用Nokogiri解析:“每个”和“内容”,但有效但却给出了错误

时间:2015-10-25 17:15:56

标签: ruby-on-rails ruby nokogiri

我使用Nokogiri gem用'each'和'content'方法解析网站。这是一个复杂的解析器,有几种使用这些方法。出于某种原因,某些任务失败并出现错误。 nillclass的未定义方法'content'。并为我提供了我使用这些类的所有通道的参考。这不是常规的致命错误,如果我尝试将这些内容的结果打印出来,那么打印所需的结果但仍然会崩溃。这是我得到的错误:

rake aborted!
undefined method `content' for nil:NilClass
/mnt/shoppe/lib/tasks/parser.rake:50:in `block (6 levels) in <top (required)>'
/mnt/shoppe/lib/tasks/parser.rake:49:in `block (5 levels) in <top (required)>'
/mnt/shoppe/lib/tasks/parser.rake:47:in `block (4 levels) in <top (required)>'
/mnt/shoppe/lib/tasks/parser.rake:27:in `block (3 levels) in <top (required)>'
/mnt/shoppe/lib/tasks/parser.rake:12:in `block (2 levels) in <top (required)>'

我是ruby和RoR的新手。也许有某种类型的错误,如果达到一定数量的错误,只会崩溃程序?无法找到类似这样的东西,很可能我不知道要找的关键词。所以任何帮助都会有用。谢谢。

2 个答案:

答案 0 :(得分:1)

root = json;//JSON Object returned from my program
//...
var rootNodes = [ root.children[0], root.children[1] ];

此错误表示,在您的佣金任务的某个时刻,当您致电Undefined method 'content' for nil:NilClass. 时,您的something.contentsomething

要避免此问题,您可以使用try致电nil

content

这样,如果某些something.try(:content) something,您的程序就不会崩溃。

答案 1 :(得分:1)

通常这意味着您的输入在某些时候会有所不同。例如,您正在解析循环中的节点数组并尝试从链接访问获取内容,如下所示:

<div><a href="">test</a></div>
<div><a href="">test</a></div>
<div></div>

注意第三个div。如果您希望代码div始终包含链接,则代码将在没有链接的div上失败,因为链接将为nil并尝试获取nil上的内容你有错误。

要解决此问题,您可以使用link.try(:content)而不是直接致电link.content