Python中出现IndexError: list index out of range错误求助
聊聊你遇到的Python程序IndexError问题
嘿,我来帮你拆解下这个报错的根源,以及怎么解决它~
错误到底为啥出现?
你看这行报错的代码:
link2 = link2.split('https://www.adidas.com/on/demandware.store/Sites-adidas-US-Site/en_US/MiAccount-Register/')[1]
split()方法的逻辑是:用你指定的那段长URL字符串去切割link2的内容,如果这段字符串根本不在link2里,split只会返回一个只有1个元素的列表。这时候你硬要取索引[1],自然就会触发IndexError: list index out of range——毕竟列表里只有索引0的元素嘛。
至于为啥程序能跑一段时间才炸?大概率是这两种情况:
- 前几次请求时,你拿到的
link2内容里确实包含那段阿迪达斯的注册链接片段,split后能得到至少两个元素,所以取[1]没问题。 - 运行一阵后,要么是网站的反爬机制盯上你了(比如请求太频繁被限制,返回的页面内容变了),要么是阿迪达斯的页面结构悄悄更新了,导致
link2里再也找不到那段用来分割的字符串,split后的列表就只剩一个元素,一取[1]就报错。
怎么修复?给你几个实用方案
- 先做检查再取值:别直接硬取索引,先判断split后的列表长度够不够。比如改成这样:
split_parts = link2.split('https://www.adidas.com/on/demandware.store/Sites-adidas-US-Site/en_US/MiAccount-Register/') if len(split_parts) >= 2: link2 = split_parts[1] else: # 这里可以加容错逻辑,比如打印当前的link2内容看看啥情况,或者跳过这次循环 print(f"分割失败啦,当前link2的内容是: {link2}") continue - 对付反爬:如果是被网站限制了,试试加个像样的
User-Agent请求头模拟浏览器、给请求加个时间间隔(比如用time.sleep(1)),或者换个代理IP,降低被识别的概率。 - 换更靠谱的解析方式:别依赖固定字符串分割这种“硬编码”的方式,改用
BeautifulSoup或者lxml这类HTML解析库,根据页面的标签结构(比如a标签的href属性)来提取链接,就算页面小改,也不容易崩。
内容的提问来源于stack exchange,提问作者Jordan Hawkes
相关产品推荐
相关产品推荐

