El boto.s3.key.Keyobjeto de Boto 2 solía tener un existsmétodo que verificaba si la clave existía en S3 haciendo una solicitud HEAD y mirando el resultado, pero parece que ya no existe. Tienes que hacerlo tú mismo:
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() realiza una solicitud HEAD para una sola clave, que es rápida, incluso si el objeto en cuestión es grande o si tiene muchos objetos en su depósito.
Por supuesto, es posible que esté verificando si el objeto existe porque planea usarlo. Si ese es el caso, puede olvidarse del load()y hacer un get()o download_file()directamente, luego manejar el caso de error allí.