Неподдерживаемый операнд между str и int - PullRequest
0 голосов
/ 11 апреля 2020

Я работаю с BeautifulSoup (от BS4). Я получаю TypeError: unsupported operand type(s) for -: 'str' and 'int'. Я проверил все предыдущие ответы в Stackoverflow, но ничего не получалось.

soup = BeautifulSoup(htmltext, 'html5lib')
texts = soup.findAll('p')
visible_texts = filter(visible, texts)
article = ""
for text in visible_texts:
    article += text.decode('utf-8')
 ... other codes

Я получаю сообщение об ошибке в строке article += text.decode('utf-8'). Я не понимаю, где находится int в коде. Переменная article объявляется как строка перед l oop. text.decode (...) возвращает строку в запрошенной кодировке.

видимым в аргументе фильтра является пользовательская функция, а htmltext является методом request.get () text object .

Любые пояснения были бы полезны.


Ниже приведены следующие несколько строк кода, которые выходят за пределы для l oop сразу после конкатенации объекта article.

 article = str(article)
 article = BeautifulSoup(article, features='html5lib')
 print('\n\n\n', article, '\n\n\n')
 article = str(article).replace("\n", " ")

Полный код доступен здесь, если требуется.

1 Ответ

0 голосов
/ 11 апреля 2020

Вы вводите нас в заблуждение, потому что вы не включили трассировку стека, которая рассказывает другую историю. При тестировании вашего кода я получил следующую трассировку стека:

Traceback (most recent call last):
  File "test.py", line 38, in <module>
    main()
  File "test.py", line 32, in main
    article += text.decode('utf-8')
  File "C:\python-3.7\env\lib\site-packages\bs4\element.py", line 1559, in decode
    indent_space = (' ' * (indent_level - 1))
TypeError: unsupported operand type(s) for -: 'str' and 'int'

Итак, это не дополнение в вашем коде вызывает исключение, а вычитание в коде bs4.

причина, по которой вы получаете это исключение, заключается в том, что вы вызываете decode(), используя неверные аргументы. Он определяется следующим образом:

decode(indent_level=None, eventual_encoding='utf-8', formatter='minimal')

Таким образом, text.decode('utf-8') из вашего кода эквивалентно text.decode(indent_level='utf-8'), и это не имеет смысла, следовательно, исключение.

Вы можете исправить ошибка с использованием:

article += text.decode(eventual_encoding='utf-8')

или

article += text.decode(None, 'utf-8')

PS: В следующий раз, пожалуйста, включите трассировку стека в ваш вопрос; -)

...