Python 如果试图操纵当前正在操纵的对象,S3会引发什么异常?

Python 如果试图操纵当前正在操纵的对象,S3会引发什么异常?,python,exception,amazon-s3,boto,Python,Exception,Amazon S3,Boto,我正在编写一段代码,将S3对象从一个键复制到另一个键。此代码位于API端点后面,因此在复制操作进行时,可能会多次调用它 据我所知,S3复制操作是原子的(根据) 因此,我假设如果尝试对当前正在复制到的密钥启动复制操作,将引发异常。这可能是什么例外 我能找到的最接近的东西是“OperationAborted”,但我想确定一下,我自己也没有一个触发这个案例的好方法。根据S3文档: 对单个密钥的更新是原子的。例如,如果您对现有密钥执行PUT操作,后续读取可能会返回旧数据或更新的数据,但不会返回损坏或部分

我正在编写一段代码,将S3对象从一个键复制到另一个键。此代码位于API端点后面,因此在复制操作进行时,可能会多次调用它

据我所知,S3复制操作是原子的(根据)

因此,我假设如果尝试对当前正在复制到的密钥启动复制操作,将引发异常。这可能是什么例外


我能找到的最接近的东西是“OperationAborted”,但我想确定一下,我自己也没有一个触发这个案例的好方法。

根据S3文档:

对单个密钥的更新是原子的。例如,如果您对现有密钥执行PUT操作,后续读取可能会返回旧数据或更新的数据,但不会返回损坏或部分数据

还请注意:

AmazonS3目前不支持并发更新的对象锁定。如果对同一密钥同时发出两个PUT请求,则具有最新时间戳的请求获胜。如果这是一个问题,您将需要在应用程序中构建一个对象锁定机制

这也可以解释,到目前为止,您只能通过
botocore
捕获少数客户端异常(但不能捕获资源)。这些是:

  • S3.Client.exceptions.BucketAlreadyExists
  • S3.Client.exceptions.BucketAlreadyOwnedByYou
  • S3.Client.exceptions.NoSuchBucket
  • S3.Client.exceptions.NoSuchKey
  • S3.Client.exceptions.NoSuchUpload
  • S3.Client.exceptions.ObjectAlreadyInActiveTierError
  • S3.Client.exceptions.ObjectNotInactivateTierror
有关上述内容的更多详细信息,请参见

换句话说,只要复制的密钥存在,就不应该有任何异常,因为您可以同时访问它并将其复制到需要的任何地方


另一方面,如果如上所述不断更新复制的密钥,则可能会复制过时的数据,因为S3提供了所有区域中覆盖放置和删除的最终一致性。

根据S3文档:

对单个密钥的更新是原子的。例如,如果您对现有密钥执行PUT操作,后续读取可能会返回旧数据或更新的数据,但不会返回损坏或部分数据

还请注意:

AmazonS3目前不支持并发更新的对象锁定。如果对同一密钥同时发出两个PUT请求,则具有最新时间戳的请求获胜。如果这是一个问题,您将需要在应用程序中构建一个对象锁定机制

这也可以解释,到目前为止,您只能通过
botocore
捕获少数客户端异常(但不能捕获资源)。这些是:

  • S3.Client.exceptions.BucketAlreadyExists
  • S3.Client.exceptions.BucketAlreadyOwnedByYou
  • S3.Client.exceptions.NoSuchBucket
  • S3.Client.exceptions.NoSuchKey
  • S3.Client.exceptions.NoSuchUpload
  • S3.Client.exceptions.ObjectAlreadyInActiveTierError
  • S3.Client.exceptions.ObjectNotInactivateTierror
有关上述内容的更多详细信息,请参见

换句话说,只要复制的密钥存在,就不应该有任何异常,因为您可以同时访问它并将其复制到需要的任何地方

另一方面,如果如上所述不断更新复制的密钥,则可能会复制过时的数据,因为S3提供了所有区域中覆盖放置和删除的最终一致性