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
相关产品推荐
相关产品推荐

