2017-02-02 5 views
0

Как решить ValueError нет в списке проблем? Я не понимаю, что не так с моим кодом.Как решить ValueError нет в списке? Он находится в списке

from urllib.request import urlopen 
    from bs4 import BeautifulSoup 
    html = urlopen("http://uk.reuters.com/business/quotes/financialHighlights? symbol=AAPL.O") 

    bsObj = BeautifulSoup(html,"html.parser") 
    tag = bsObj.findAll("td") 
    tagList = [] 
    for tagItem in tag: 
     tagList.append(tagItem) 

    print(tagList.index("<td>Dec</td>")) 

Ошибка:

Traceback (most recent call last): 
File "/Users/home/Desktop/development/x/code.py", line 11, in <module> 
print(tagList.index("<td>Dec</td>")) 
ValueError: '<td>Dec</td>' is not in list 

Process finished with exit code 1 
+0

'для тега tag: 'запутан. –

+0

ОК, я обновлю код, чтобы заменить тег tagItem. Благодаря! –

ответ

2

Вы создаете список <class 'bs4.element.Tag'> объектов. Их строковое представление похоже на строку, которую вы ищете, за исключением того, что объекты не равны, так как они имеют разные типы.

(обратите внимание, что печать список выходов [<td>Dec</td>, <td>Dec</td>], обратите внимание на отсутствие кавычек, выводя тот же список, но со строками дает ['<td>Dec</td>', '<td>Dec</td>'])

QuickFix: создать свой список в виде строки

for tagItem in tag: 
    tagList.append(str(tagItem)) 

или в списке понимание:

tagList = [str(tagItem) for tagItem in tag] 

Сейчас index работы: возвращает "0"

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

print(next(i for i,x in enumerate(tagList) if str(x)=="<td>Dec</td>")) 
+0

Спасибо, мистер Фабр :) –

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