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

Spotify歌单歌曲批量搜索YouTube时出现IndexError索引越界报错

错误原因

IndexError: list index out of range 出现的核心原因是处理第148首歌曲时,VideosSearch 接口返回的 video['result'] 为空列表,没有可访问的元素,直接取下标[0]就会触发越界报错。
常见的触发场景有两类:

  • 当前歌曲的名称+歌手+专辑组合关键词太过特殊,YouTube搜索无任何匹配结果返回
  • 短时间内连续发起大量搜索请求,被YouTube反爬机制临时拦截,返回空结果集
修复方案

需要给搜索逻辑增加空结果判断、异常捕获,同时添加请求间隔避免触发反爬机制,同时修正你原代码中计数变量的写法错误(count=+ 1 是错误写法,每次只会将count赋值为1,不会累计计数,需要改为count += 1)。
修改后的搜索部分代码如下:

import time
# 前面Spotify抓取歌曲列表的代码和你原代码完全一致,无需改动

############## youtube search ###########

with open('songs', encoding='utf-8') as f:
    lines = f.read().splitlines()

success_urls = []
failed_songs = []
count = 0

for line in lines:
    count += 1
    print(f"正在处理第{count}首:{line}")
    try:
        videosSearch = VideosSearch(line, limit = 1)
        video = videosSearch.result()
        # 先判断搜索结果是否为空
        if not video['result']:
            print(f"第{count}首无匹配搜索结果,已跳过")
            failed_songs.append(line)
            time.sleep(2)
            continue
        url = video['result'][0]['link']
        print(url)
        success_urls.append(url)
    except Exception as e:
        print(f"第{count}首处理出错,错误信息:{e}")
        failed_songs.append(line)
    # 统一添加2秒请求间隔,避免触发反爬
    time.sleep(2)

# 运行结束后输出统计信息
print(f"全部处理完成,成功获取{len(success_urls)}首歌曲的YouTube链接,{len(failed_songs)}首处理失败")
if failed_songs:
    print("处理失败的歌曲列表如下:")
    for song in failed_songs:
        print(song)

修改后代码不会中途中断,运行结束后会输出所有失败的歌曲,你可以手动处理这些异常条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:06