You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码遇IndexError: list index out of range问题求助

问题描述

运行以下Python代码时遇到IndexError: list index out of range错误,目标是仅收集当前NFL赛事信息,已尝试通过JSON中的字段识别赛事,但运行出错。本人是Python新手,若表述浅显请见谅。

代码片段

# US FOOTBALL EVENT INFO API LINK
link = 'http://xxxxxx.net/v1/feeds/sportsbookv2/event/group/1000093199.json?app_id=21e03bb8&app_key' \
       '=c0191eaf354cc07bc3769817b8c1acd0&local=en_AU&includeparticipants=false&site=www.xxxx.com.au '

# Request data from link as 'str'
data = requests.get(link).text
# convert 'str' to Json
data = json.loads(data)
# JSON PARSE
for event_data in data['events']:
    if event_data['group'] == 'NFL' and event_data['tags'][3] == 'MATCH':
            competition = event_data['group']
            event_id = event_data['id']
            event_name = event_data['name']
            event_start = event_data['start']
            event_status = event_data['state']

            print(competition, event_id, event_name, event_start, event_status)

运行输出

NFL 1018663095 Denver Broncos - Indianapolis Colts 2022-10-07T00:15:00Z NOT_STARTED
NFL 1018663094 Buffalo Bills - Pittsburgh Steelers 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018663086 Cleveland Browns - Los Angeles Chargers 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018663084 Jacksonville Jaguars - Houston Texans 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018663083 Minnesota Vikings - Chicago Bears 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018663082 New England Patriots - Detroit Lions 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018663081 New Orleans Saints - Seattle Seahawks 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018667663 New York Jets - Miami Dolphins 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018663077 Tampa Bay Buccaneers - Atlanta Falcons 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018663074 Washington Commanders - Tennessee Titans 2022-10-09T17:00:00Z NOT_STARTED
NFL 1018663073 Carolina Panthers - San Francisco 49ers 2022-10-09T20:05:00Z NOT_STARTED
NFL 1018663072 Arizona Cardinals - Philadelphia Eagles 2022-10-09T20:25:00Z NOT_STARTED
NFL 1018663069 Los Angeles Rams - Dallas Cowboys 2022-10-09T20:25:00Z NOT_STARTED
NFL 1018663039 Baltimore Ravens - Cincinnati Bengals 2022-10-10T00:20:00Z NOT_STARTED
NFL 1018663037 Kansas City Chiefs - Las Vegas Raiders 2022-10-11T00:15:00Z NOT_STARTED
Traceback (most recent call last):
  File "C:\Users\xxxxx\OneDrive\Desktop\xxxxx-functions\testing.py", line 44, in <module>
    event_info()
  File "C:\Users\xxxxx\OneDrive\Desktop\xxxxx-functions\testing.py", line 23, in event_info
    if event_data['group'] == 'NFL' and event_data['tags'][3] == 'MATCH':
IndexError: list index out of range

数据说明

NFL赛事的JSON数据中,tags字段结构如下:

{
    "englishName": "Cleveland Browns - Los Angeles Chargers",
    "groupId": 1000093656,
    "homeName": "Cleveland Browns",
    "groupSortOrder": 2876820019684212736,
    "path": 
    [
        {
            "englishName": "American Football",
            "termKey": "american_football",
            "name": "American Football",
            "id": 1000093199
        },
        {
            "englishName": "NFL",
            "termKey": "nfl",
            "name": "NFL",
            "id": 1000093656
        }
    ],
    "id": 1018663086,
    "state": "NOT_STARTED",
    "group": "NFL",
    "start": "2022-10-09T17:00:00Z",
    "nonLiveBoCount": 144,
    "tags": 
    [
        "",
        "OFFERED_LIVE",
        "BET_BUILDER",
        "MATCH"
    ],
    "awayName": "Los Angeles Chargers",
    "name": "Cleveland Browns - Los Angeles Chargers",
    "sport": "AMERICAN_FOOTBALL"
}

但其他联赛(如CFL)的tags列表长度不足,导致索引越界:

{
    "englishName": "Montreal Alouettes - Ottawa RedBlacks",
    "groupId": 1000093370,
    "homeName": "Montreal Alouettes",
    "groupSortOrder": 3874820019684212736,
    "path": 
    [
        {
            "englishName": "American Football",
            "termKey": "american_football",
            "name": "American Football",
            "id": 1000093199
        },
        {
            "englishName": "CFL",
            "termKey": "cfl",
            "name": "CFL",
            "id": 1000093370
        }
    ],
    "id": 1018400365,
    "state": "NOT_STARTED",
    "group": "CFL",
    "start": "2022-10-10T17:00:00Z",
    "nonLiveBoCount": 3,
    "tags": 
    [
        "OFFERED_LIVE",
        "BET_BUILDER",
        "MATCH"
    ],
    "awayName": "Ottawa RedBlacks",
    "name": "Montreal Alouettes - Ottawa RedBlacks",
    "sport": "AMERICAN_FOOTBALL"
}
解决方案

错误根源是:直接通过索引tags[3]获取元素,但部分赛事的tags列表长度不足4,访问索引3触发越界错误。另外,逻辑上应先筛选NFL赛事,再检查tags,避免对非NFL赛事做无效判断。

提供两种优化方案:

方案一:先筛选NFL,再安全检查tags

先锁定NFL赛事,再判断tags长度是否足够,且目标元素为MATCH:

for event_data in data['events']:
    # 先筛选NFL赛事
    if event_data['group'] == 'NFL':
        # 检查tags列表长度足够,且第4个元素是MATCH
        if len(event_data['tags']) >=4 and event_data['tags'][3] == 'MATCH':
            competition = event_data['group']
            event_id = event_data['id']
            event_name = event_data['name']
            event_start = event_data['start']
            event_status = event_data['state']

            print(competition, event_id, event_name, event_start, event_status)

方案二:直接检查tags是否包含'MATCH'

如果MATCH标签的位置不固定,用in判断存在性更稳妥:

for event_data in data['events']:
    if event_data['group'] == 'NFL' and 'MATCH' in event_data['tags']:
        competition = event_data['group']
        event_id = event_data['id']
        event_name = event_data['name']
        event_start = event_data['start']
        event_status = event_data['state']

        print(competition, event_id, event_name, event_start, event_status)

两种方案都能避免索引越界,方案二更灵活,即使MATCH在tags中的位置变化也不会出错。

内容的提问来源于stack exchange,提问作者DrewS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:15:45