当我在python中使用if else语句时,我不断收到错误消息。我希望我的脚本检查索引是否存在,如果存在,则运行代码,如果不存在,则运行另一个代码。我收到错误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 = '-'
答案 0 :(得分:2)
进行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]