Estoy tratando de escribir Python "bueno" y capturar un S3 sin tal error de clave con esto:
session = botocore.session.get_session()
client = session.create_client('s3')
try:
client.get_object(Bucket=BUCKET, Key=FILE)
except NoSuchKey as e:
print >> sys.stderr, "no such key in bucket"
Pero NoSuchKey no está definido y no puedo rastrearlo hasta la importación, necesito definirlo.
e.__class__es botocore.errorfactory.NoSuchKeypero from botocore.errorfactory import NoSuchKeyda un error y from botocore.errorfactory import *tampoco funciona y no quiero capturar un error genérico.

s3 = boto3.resource("s3")), puede acceder al cliente y, por lo tanto, a la Excepción a través des3.meta.client.exceptions.NoSuchKey. Ver stackoverflow.com/questions/38581465/…En boto3, pude acceder a la excepción en el metacliente del recurso.
import boto3 s3 = boto3.resource('s3') s3_object = s3.Object(bucket_name, key) try: content = s3_object.get()['Body'].read().decode('utf-8') except s3.meta.client.exceptions.NoSuchKey: print("no such key in bucket")fuente
Creo que la forma más elegante de hacer esto es en Boto3 es
session = botocore.session.get_session() client = session.create_client('s3') try: client.get_object(Bucket=BUCKET, Key=FILE) except client.exceptions.NoSuchKey: print("no such key in bucket")La documentación sobre el manejo de errores parece escasa, pero lo siguiente imprime los códigos de error para los que funciona:
session = botocore.session.get_session() client = session.create_client('s3') try: try: client.get_object(Bucket=BUCKET, Key=FILE) except client.exceptions.InvalidBucketName: print("no such key in bucket") except AttributeError as err: print(err)fuente