El boto.s3.key.Key
objeto de Boto 2 solía tener un exists
mé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í.