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

Python中Google Sheets API Token无法自动刷新问题求助

解决Google Sheets API凭证自动刷新失效问题

你的代码在token过期且自动刷新失败时,没有对应的异常处理和 fallback 逻辑,导致程序中断需要手动干预。下面是修复后的cred()函数,能自动处理刷新失败的情况,无需手动删除token.json:

from google.auth.exceptions import RefreshError
# 确保导入这个异常类

def cred():
    creds = None
    
    if os.path.exists("token.json"):
        creds = Credentials.from_authorized_user_file("token.json", SCOPES)
    
    # 检查凭证是否有效
    if not creds or not creds.valid:
        # 尝试刷新凭证,捕获刷新失败的异常
        if creds and creds.expired and creds.refresh_token:
            try:
                creds.refresh(Request())
            except RefreshError:
                # 刷新失败,重新走授权流程
                flow = InstalledAppFlow.from_client_secrets_file(
                    "credentials.json", SCOPES
                )
                creds = flow.run_local_server(port=0)
        else:
            # 无有效凭证或无刷新token,直接授权
            flow = InstalledAppFlow.from_client_secrets_file(
                "credentials.json", SCOPES
            )
            creds = flow.run_local_server(port=0)
        
        # 保存更新后的凭证
        with open("token.json", "w") as token:
            token.write(creds.to_json())
    
    service = build("sheets", "v4", credentials=creds)
    return service

关键修改点:

  • 引入RefreshError异常捕获,当刷新token失效或网络问题导致刷新失败时,自动触发重新授权流程
  • 完善分支逻辑,确保刷新失败后不会停留在无效凭证状态,而是直接获取新的有效凭证
  • 保持原有自动保存token的逻辑,确保新凭证能覆盖旧的失效文件

这样修改后,程序遇到凭证过期或刷新失败时,会自动重新完成授权(第一次需要手动登录,后续正常情况下会自动刷新,即使刷新失败也会自动重新授权),无需手动干预,保证自动化程序的数据流不中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:47:23