TypeError: объект NoneType не является итеративным, даже если он говорит, что это строка, почему это так? - PullRequest
0 голосов
/ 16 января 2020

Цель этой функции - проверить, недоступен ли элемент Amazon или нет.

def check(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
        page = requests.get(url, headers = headers)

        doc = html.fromstring(page.content)
        XPATH_AVAILABILITY = '//div[@id ="availability"]//text()'
        RAw_AVAILABILITY = doc.xpath(XPATH_AVAILABILITY)
        AVAILABILITY = ''.join(RAw_AVAILABILITY).strip()
        if any(re.match(r'unavailable', str(AVAILABILITY), re.IGNORECASE)):
            return "UNAVAILABLE"
        else:
            return "AVAILABLE"

Я проверил type() переменной AVAILABILITY (это строка), и она выглядит следующим образом когда элемент недоступен:

Currently unavailable.














            We don't know when or if this item will be back in stock.

и вот так (тип: строка), когда он доступен:

In Stock. или In stock.

Вот почему я выбрал для регулярного выражения для обнаружения «недоступен» на выходе. Но ошибка говорит:

Файл "scra.py", строка 68, в

, если есть (re.match (r'unavailable ', check (i), re. IGNORECASE)):

TypeError: объект 'NoneType' не повторяется

Он никогда не выводит "None", поэтому я удивлен. Пожалуйста, помогите мне решить эту проблему.

1 Ответ

2 голосов
/ 16 января 2020

any(x) перебирает через x и возвращает True, если находит элемент, который оценивает значение true, или False, если доходит до конца.

re.match возвращает либо Match объект, если найдено совпадение, либо None.

Ваш контент не должен совпадать с регулярным выражением, re.match возвращает None и any не может перебрать его.

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