使用gspread打开Google Sheet时报StopIteration与SpreadsheetNotFound错误问询
错误触发原因
gspread.exceptions.SpreadsheetNotFound是gspread框架的明确报错,本质是你使用的服务账号的可访问文档列表中,找不到你指定名称的Google Sheet文件。底层伴随的StopIteration是gspread内部工具函数遍历所有可访问文档、未匹配到目标时触发的迭代终止异常,两者是因果关系,核心问题就是匹配不到目标表格。
排查解决步骤
- 核对表格名称匹配度:确认代码中
client.open()传入的字符串,和Google Sheet网页端顶部显示的文档名称完全一致,大小写、空格、特殊符号均不能有偏差,比如你实际代码中调用的是client.open("Covid Data 2020-21"),需要确认目标表格的名称完全和这个字符串匹配。 - 给服务账号授予访问权限:打开目标Google Sheet,点击右上角「共享」按钮,从你的
creds.json文件中提取client_email字段对应的邮箱地址,将该邮箱填入共享框,权限至少选择「查看者」,如果需要写入内容则选择「编辑者」,完成共享后建议等待1-2分钟(谷歌权限同步存在延迟)再运行代码测试。 - 改用更稳定的ID调用方式:按名称匹配容易出现重名、共享盘文件无法匹配的问题,推荐直接用表格ID调用。表格ID可以从Google Sheet的URL中提取,URL格式为
https://docs.google.com/spreadsheets/d/[表格ID]/edit,复制d/和/edit中间的字符串,将代码替换为sheet = client.open_by_key("你提取的表格ID").sheet1即可,该方式不受表格存储位置、重名问题影响,匹配准确率更高。 - 确认权限范围配置:你当前代码中的scope配置是完整可正常使用的,无需调整,如果后续修改过scope参数,需要重新生成授权凭证再测试。
内容的提问来源于stack exchange,提问作者Arpit Rathore
相关产品推荐
相关产品推荐

