Python获取YouTube频道数据时KeyError与IndexError错误如何修复
问题排查与修复方案
错误1:IndexError索引越界
触发原因:你在for i in range(len(allVideos))循环内主动写了i += 1,而range(len(allVideos))生成的i默认从0遍历到len(allVideos)-1,额外加1后最后一次循环的i会等于len(allVideos),超过了列表的最大合法索引(列表索引从0开始,最大索引为长度减1),直接触发越界。
修复方式:直接删除循环内的i += 1行即可。
错误2:KeyError字段缺失
触发原因:你的判断正确,部分视频关闭评论、点赞、点踩功能后,YouTube API返回的statistics节点不会携带对应字段,直接用['key']方式取值就会抛出KeyError。
修复方式:用字典自带的get()方法取值,同时指定字段不存在时的默认值即可。
修复后完整代码
for i in range(len(allVideos)): title.append(allVideos[i]['snippet']['title']) publishedDate.append(allVideos[i]['snippet']['publishedAt']) video_description.append(allVideos[i]['snippet']['description']) # 用get方法取值,字段不存在时默认返回0再转int liked.append(int(stats[i]['statistics'].get('likeCount', 0))) disliked.append(int(stats[i]['statistics'].get('dislikeCount', 0))) views.append(int(stats[i]['statistics'].get('viewCount', 0))) comment.append(int(stats[i]['statistics'].get('commentCount', 0))) videoid.append(allVideos[i]['snippet']['resourceId']['videoId'])
可选优化
如果存在allVideos和stats长度不一致的情况,可以在循环第一行加越界判断:
if i >= len(stats): break
内容的提问来源于stack exchange,提问作者chiranjeevi h chiru
相关产品推荐
相关产品推荐

