Я пытаюсь написать "хороший" питон и записать ошибку S3 no such key с помощью этого:
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"
Но NoSuchKey не определен, и я не могу отследить его до импорта, который мне нужен для его определения.
e.__class__
есть, botocore.errorfactory.NoSuchKey
но from botocore.errorfactory import NoSuchKey
выдает ошибку и from botocore.errorfactory import *
тоже не работает, и я не хочу фиксировать общую ошибку.
s3 = boto3.resource("s3")
), вы можете получить доступ к клиенту и, следовательно, к исключению черезs3.meta.client.exceptions.NoSuchKey
. См stackoverflow.com/questions/38581465/...В boto3 мне удалось получить доступ к исключению в мета-клиенте ресурса.
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")
источник
Я думаю, что самый элегантный способ сделать это в Boto3 -
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")
Документация по обработке ошибок кажется скудной, но ниже приведены коды ошибок, для которых это работает:
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)
источник