2015-10-25 5 views
0

Я использую драгоценный камень Нокогири для анализа веб-сайта с помощью методов «каждый» и «контент». Это сложный парсер с несколькими приемами этих методов. По какой-то причине в какой-то момент задача выходит из строя с ошибкой. Неопределенный метод «content» для nillclass. И дает мне ссылки для всех дорожек, в которых я использую эти классы. Это не регулярная фатальная ошибка. Если я попытаюсь поместить результат этого контента, он печатает результат, необходимый, но все же сбой. Вот ошибка, которую я получаю:Разбор с Nokogiri: «каждый» и «контент», работает, но дает ошибку

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)>' 

Я новичок в рубине и RoR. Может быть, есть какая-то ошибка, которая только вредит программе, если достигнут некоторый номер этой ошибки? Не могу найти упоминания о чем-то подобном, скорее всего, я не знаю ключевого слова, которое нужно искать. Поэтому любая помощь будет полезна. Спасибо.

+0

показать нам свой код –

+0

Мы не можем помочь вам без минимального примера кода, где возникает проблема, а также минимальные данные, чтобы продемонстрировать проблему. Пожалуйста, прочитайте «[ask]». –

ответ

1
Undefined method 'content' for nil:NilClass. 

Эта ошибка означает, что в какой-то момент в вашей передней задачи, когда вы звоните something.content, ваш something является nil.

Чтобы избежать этой проблемы, вы можете вызвать content с помощью try:

something.try(:content) 

Таким образом, ваша программа не будет вылетать, если некоторые из something с являются nil.

1

Обычно это означает, что ваш вход меняется в какой-то момент. Например, вы разбираете массив узлов в цикле и пытается получить доступ к контенту получить от ссылки, что-то вроде этого:

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

Обратите внимание на третий Див. Если вы ожидаете в своем коде, что div всегда содержит ссылку, ваш код не будет работать на div без ссылки, так как ссылка будет nil, и попытка получить контент на nil даст вам ошибку.

Чтобы обойти это, вы можете использовать link.try(:content) вместо прямого звонка link.content.

Смежные вопросы