问题:如何捕获botocore的NoSuchKey异常?
我正在尝试编写“好”的python并捕获一个S3,但没有这样的关键错误:
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 *
也不起作用,我也不想捕获一个通用错误。
回答 0
from botocore.exceptions import ClientError
try:
response = self.client.get_object(Bucket=bucket, Key=key)
return json.loads(response["Body"].read())
except ClientError as ex:
if ex.response['Error']['Code'] == 'NoSuchKey':
logger.info('No object found - returning empty')
return dict()
else:
raise
回答 1
使用botocore 1.5,客户端句柄似乎公开了异常类:
session = botocore.session.get_session()
client = session.create_client('s3')
try:
client.get_object(Bucket=BUCKET, Key=FILE)
except client.exceptions.NoSuchKey as e:
print >> sys.stderr, "no such key in bucket"
回答 2
在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")
回答 3
我认为最完美的方式是在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)
<位于0x105e08c50的botocore.errorfactory.S3Exceptions对象>对象没有属性’InvalidBucketName’。有效的exceptions是:BucketAlreadyExists,BucketAlreadyOwnedByYou,NoSuchBucket,NoSuchKey,NoSuchUpload,ObjectAlreadyInActiveTierError,ObjectNotInActiveTierError
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。