В boto.s3.key.Key
объекте Boto 2 использовался exists
метод, который проверял, существует ли ключ на S3, выполняя запрос HEAD и просматривая результат, но кажется, что его больше не существует. Вы должны сделать это самостоятельно:
import boto3
import botocore
s3 = boto3.resource('s3')
try:
s3.Object('my-bucket', 'dootdoot.jpg').load()
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
# The object does not exist.
...
else:
# Something else has gone wrong.
raise
else:
# The object does exist.
...
load()
выполняет запрос HEAD для одного ключа, что быстро, даже если рассматриваемый объект большой или у вас много объектов в корзине.
Конечно, вы можете проверять, существует ли объект, потому что вы планируете его использовать. Если это так, вы можете просто забыть о load()
и сделать a get()
или download_file()
напрямую, а затем обработать ошибку там.