Python 索引超出范围,但实际上在范围内

Python 索引超出范围,但实际上在范围内,python,list,web-scraping,beautifulsoup,range,Python,List,Web Scraping,Beautifulsoup,Range,我对使用逗号分隔符从某些文本中拆分的列表有问题 列表中有4-5项,但当我尝试获取列表中的第4-5项时,它显示超出范围。不知道为什么会这样 import re import requests r = requests.get('https://halalhmc.org/outlets-by-name/') from bs4 import BeautifulSoup soup = BeautifulSoup(r.text, 'html.parser') results = soup.find_a

我对使用逗号分隔符从某些文本中拆分的列表有问题

列表中有4-5项,但当我尝试获取列表中的第4-5项时,它显示超出范围。不知道为什么会这样

import re
import requests
r = requests.get('https://halalhmc.org/outlets-by-name/')
from bs4 import BeautifulSoup

soup = BeautifulSoup(r.text, 'html.parser')

results = soup.find_all('div', attrs={'class':'outlet-content'})

records = []
for result in results:

    name = result.find('h3').text
    fullAddress = result.find('p', attrs={'class':'outlet-address'}).text
    split_address = fullAddress.split(',')
    address1 = split_address[0]
    city = split_address[1]
    city1 = split_address[2]
    validPcode = re.match("[A-Z]{2}[0-9] [0-9][A-Z]{2}",split_address[3])
    if validPcode:
        postCode = split_address[3]
    else:
        county = split_address[3]
        postCode = split_address[4]
    records.append((name,address1[10:],city,city1,postCode))

print records[2]
当我打印lensplit_地址并删除打印记录[1]时,长度为5


为什么会发生这种情况?

我们首先试着自己调试代码。你的问题是,为什么会发生这种情况

它在postCode=split_address[4]中给出错误,因为您的列表有4个元素0,1,2,3,并且您正在访问不存在的第4个元素。。

你没有索引[4],这就是为什么它会给你超出范围的错误

更新地区:

在for循环中,split_地址的长度将更改为4和5,当长度为4时,您尝试获取索引[4]时,它肯定会给出索引超出范围的错误。要解决此问题,您必须对其添加检查

试试这个:

我对你的代码做了一点修改,只对它的plit_地址添加了一个检查


希望您能理解,并对您有所帮助!:

什么是完整的错误回溯?html代码可能有用我们可以确定的一件事是,它实际上超出了范围,我建议您添加一些打印语句,以允许您调试代码,如printsplit_address和printlensplit_address@DavidG错误是回溯最近的调用last:文件HMC.py,第24行,in postCode=拆分地址[4]索引器:从中列出索引range@Dominique谢谢你的洞察力。首先,我是一个新手,正在学习如何用python编写代码。其次,我昨天和今天上午花了一整晚的时间通过谷歌搜索和尝试各种事情来调试这个问题。第三,为什么有些人对StackOverflow如此苛刻?这不是一个提问和寻求帮助的地方吗?谢谢你的解释。在本例中,它不存在,但当我尝试为另一条记录运行相同的代码时,它仍然不起作用。尝试打印记录[1]@Muhammadibn:检查更新的答案!希望它能帮助你此外,我认为你必须把你的国家分裂成两个国家。去拿邮政编码!谢谢。我确实进行了重新匹配,但没有正确执行else语句。我现在明白了。
import re
import requests
r = requests.get('https://halalhmc.org/outlets-by-name/')
from bs4 import BeautifulSoup

soup = BeautifulSoup(r.text, 'html.parser')

results = soup.find_all('div', attrs={'class':'outlet-content'})

records = []
for result in results:

    name = result.find('h3').text
    fullAddress = (result.find('p', attrs={'class':'outlet-address'})).text
    split_address = fullAddress.split(',')
    address1 = split_address[0]
    city = split_address[1]
    city1 = split_address[2]
    validPcode = re.match("[A-Z]{2}[0-9] [0-9][A-Z]{2}",split_address[3])
    if validPcode:
        postCode = split_address[3]
    else:
        county = split_address[3]
        if len(split_address) is 4:
            postCode = split_address[3]
        elif len(split_address) is 3:
            postCode = split_address[4]
    records.append((name,address1[10:],city,city1,postCode))

# only for checking
print records[1]
print records[2]
print records[3]
print records[4]
print records[5]