为什么在Python中将用户添加到Google工作表时,Google Drive API会出现500内部服务器错误?

为什么在Python中将用户添加到Google工作表时,Google Drive API会出现500内部服务器错误?,python,google-api,google-api-python-client,google-sheets-api,Python,Google Api,Google Api Python Client,Google Sheets Api,我正在使用GoogleAPI编写python脚本。它读取数据并将其写入新文件,与指定的电子邮件共享该文件,并返回新文件的id def read_sheet(self,spreadsheetId): try: result=self.service.spreadsheets().get(spreadsheetId=spreadsheetId,includeGridData=True,fields='namedRanges,properties,sheets').execut

我正在使用GoogleAPI编写python脚本。它读取数据并将其写入新文件,与指定的电子邮件共享该文件,并返回新文件的id

def read_sheet(self,spreadsheetId):
    try:
        result=self.service.spreadsheets().get(spreadsheetId=spreadsheetId,includeGridData=True,fields='namedRanges,properties,sheets').execute()
        return result
    except apiclient.errors.HttpError as e:
        traceback.print_exc()
        print(e)
        sys.exit(1)

def create_spreadsheet(self,data,email):
    try:
        newid=self.service.spreadsheets().create(body=data,fields='spreadsheetId').execute()
        newid=newid.get('spreadsheetId')
        self.give_permissions(email,newid)
        return newid
    except apiclient.errors.HttpError as e:
        traceback.print_exc()
        print(e)
        sys.exit(1)
这段代码运行得很好,但不是100%准确。有时我会收到500个内部服务器错误,但该文件是在我的帐户中创建的。我发现了一个类似的堆栈溢出问题(),但没有帮助。我想知道确切的原因。有人能帮忙吗

编辑1:

这就是确切的错误消息

https://www.googleapis.com/drive/v3/files/349hsadfhSindfSIins-rasdfisadfOsa3OQmE/permissions?sendNotificationEmail=true&alt=json&transferOwnership=false 返回“内部错误。用户消息:”出现内部错误 发生阻止共享这些项目的事件:模板“”>

正如上面在的评论中所暗示的,错误是由于Google Drive在您尝试添加与共享(新)文件的权限时仍在处理创建请求。请记住,当您将文件添加到驱动器时,Google的服务器仍在处理文件创建,并使其在全球范围内可访问。一旦纷乱的活动平息下来,那么向文档中添加其他用户应该不会有问题

您可以从对收到的(500)个错误的描述以及建议的操作过程(即实施指数退避)中看到,这实际上只是说您应该在重试之前暂停一下&每次出现相同的错误时延长延迟。他还指出了你可以看的地方。另一个资源是这个描述性博客。如果您不想自己实现它,可以尝试使用或包

注意:您没有向我们显示所有代码,但我更改了此问题的标题,以更准确地反映您正在使用添加权限。当您使用创建工作表时,请意识到您可以使用驱动器API来完成这一切(除非您正在执行面向电子表格的操作,否则根本不使用工作表API。驱动器API用于所有与文件相关的操作,如共享、复制、导入/导出等)

底线是,您可以使用任意一种API创建工作表,但如果您不使用Sheets API做任何其他事情,为什么还要麻烦使您的应用程序更复杂呢?如果您想了解如何使用这两种API创建工作表,我的中有一小段介绍了这一点。。。您将看到它们几乎相同,但使用驱动器API还需要一件事,即


如果您想了解这两个API的更多信息,请参阅我为Drive工作表创建的其他学习资源,其中大多数都是基于Python的。

我想我迟到了,但以防万一:只需在创建请求和授予权限之间增加几秒钟的延迟。对我来说,它可以让线程睡眠10秒钟。试试这个:

def create_spreadsheet(self,data,email):
  try: 
    newid=self.service.spreadsheets().create(body=data,fields='spreadsheetId').execute()
    newid=newid.get('spreadsheetId')
    time.sleep(10)
    self.give_permissions(email,newid)
    return newid
  except apiclient.errors.HttpError as e:
    traceback.print_exc()
    print(e)
    sys.exit(1)

内部服务器错误是洪水防护。你要快你应该实现某种指数退避如何实现它@DaImToSorry我不是python专家。试着用谷歌搜索我找到了这个