Ошибка при печати переменных из контейнера элемента в конвейере, Python Scrapy - PullRequest
2 голосов
/ 26 октября 2019

Я не могу распечатать очищенное значение из конвейера с использованием Python Scrapy.

в моем коде Python Scrapy я передаю значения в контейнер элементов, и значения этих элементов необходимо сохранять в конвейере и возвращать значение. Но это бросало меня ошибки типа. Не могли бы вы помочь мне здесь.

pipe.py

class JnjwcpocPipeline(object):

    def process_item(self, item, spider):

        print("Pipeline :" + item['product_item'][0])
        return item

Трубопровод: JNJ BABY SOAP

ОШИБКА: Ошибка обработки {'product_item': нет,'wprice_item': None} Traceback (последний последний вызов):

current.result = callback(current.result, *args, **kw)

print("Pipeline :" + item['product_item'][0])

TypeError: объект 'NoneType' не может быть подписан

Ответы [ 3 ]

1 голос
/ 26 октября 2019

item['product_item'] кажется None, поэтому item['product_item'][0] не вызывается, попробуйте сделать его не None, а контейнером и протестировать его.

Если это проблема, вы можете использовать if, чтобы проверить, если это None

0 голосов
/ 26 октября 2019

Ошибка, которую вы получаете, говорит о том, что item['product_item'] имеет тип None и поэтому не может быть подписано. Вы должны проверить это, прежде чем пытаться сделать: item['product_item'][0].

class JnjwcpocPipeline(object):

    def process_item(self, item, spider):
        product_item = item['product_item']
        if product_item is not None: # <-- Check here
            print("Pipeline :" + product_item[0])
        return item
0 голосов
/ 26 октября 2019

Если вы пытаетесь напечатать элементы, которые могут иметь значение «Нет», попробуйте заключить функцию печати в блок «попробуй: кроме», который будет перехватывать любые исключения и позволять возвращать элементы, которые не равны None:

class JnjwcpocPipeline(object):

def process_item(self, item, spider):
    try:
        print("Pipeline :" + item['product_item'][0])
        return item
    except:
        print('This has a NoneType object.')

Или:

class JnjwcpocPipeline(object):

def process_item(self, item, spider):
    try:
        print("Pipeline :" + item['product_item'][0])

    except:
        pass

    finally:
        return item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...