Python при проверке наличия в списке очищенного элемента - PullRequest
0 голосов
/ 02 сентября 2018

Я получаю сообщение об ошибке, когда я использую оператор if else в python. Я хочу, чтобы мой сценарий проверял, существует ли индекс, и запускает ли он код, если нет, то запускает другой код. Я получаю ошибку ValueError: 'Named Administrator' is not in list

import requests
from bs4 import BeautifulSoup
url_3 = 'https://www.brightscope.com/form-5500/basic-info/107299/Orthopedic-Institute-Of-Pennsylvania/15801790/Orthopedic-Institute-Of-Pennsylvania-401k-Profit-Sharing-Plan/'
page = requests.get(url_3)
soup = BeautifulSoup(page.text, 'html.parser')
divs = [e.get_text() for e in soup.findAll('span')]


if divs.index('Named Administrator'):
    index = divs.index('Named Administrator')
    contact = divs[index + 1]
else:
    contact = '-'

1 Ответ

0 голосов
/ 02 сентября 2018

Вместо того, чтобы делать index, проведите __contains__ тест:

if 'Named Administrator' in divs:

и двигаться вперед, только если Named Administrator действительно существует в списке divs, поэтому вы не получите ValueError.


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

{e.get_text() for e in soup.findAll('span')}

но поскольку наборы неупорядочены, вы не сможете использовать index -ing.

Так что либо подумайте о чем-то еще, что будет работать и на наборах, т. Е. Нет необходимости получать следующее значение при индексации.

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

divs_list = [e.get_text() for e in soup.findAll('span')]
divs_set = set(divs_list)

if 'Named Administrator' in divs_set:
    index = divs_list.index('Named Administrator')
    contact = divs_list[index + 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...