Python出现IndexError: list index out of range,求错误原因排查
问题分析与解决
触发IndexError的原因
你代码里的team_game_number_element和team_game_number都是空列表,第一次循环x=0时,你尝试访问team_game_number_element[0]——但空列表根本没有索引为0的元素,直接触发list index out of range错误。而且你后续用[x].append的写法完全错误,append是列表的方法,应该直接调用列表的append,而不是先访问一个不存在的索引再调用方法。
另外还有个潜在问题:NBA常规赛虽有82场,但球员可能因伤缺席,网页里的比赛记录数量大概率少于82,硬循环82次最后也会找不到元素抛出NoSuchElementException。
修正后的代码
方案一:先定位所有Rk元素再遍历(推荐)
直接抓取所有data-stat="ranker"的th元素,遍历提取文本,不用硬循环82次:
team_game_number = [] # 定位所有Rk列的元素 rk_elements = driver.find_elements_by_xpath('//th[@data-stat="ranker"]') for element in rk_elements: # 跳过表头的"Rk"文本,只取比赛记录的数字 if element.text.isdigit(): team_game_number.append(element.text) print(element.text)
方案二:修正原列表的使用方式
如果坚持按原逻辑调整,应该直接往列表里追加元素,而不是访问不存在的索引:
team_game_number_element = [] team_game_number = [] for x in range(82): y = str(x + 1) try: element = driver.find_element_by_xpath('//th[@data-stat="ranker" and contains(., "' + y + '")]') team_game_number_element.append(element) team_game_number.append(element.text) print(team_game_number[-1]) except: # 找不到元素时退出循环(比如球员没打满82场) break
关键注意点
- 空列表不能直接通过索引访问元素,添加元素要用
列表.append(元素)的方式; - 不要假设比赛数量一定是82场,最好先获取所有元素再遍历,或者加异常处理避免报错。
内容的提问来源于stack exchange,提问作者maxpower8888
相关产品推荐
相关产品推荐

