如何捕获botocore的NoSuchKey异常?
How to capture botocore's NoSuchKey exception?
我正在尝试编写 "good" 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 *
也不起作用,我不想捕获一般错误。
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
使用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"
在 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)
< botocore.errorfactory.S3Exceptions object at 0x105e08c50 > object has no attribute 'InvalidBucketName'. Valid exceptions are: BucketAlreadyExists, BucketAlreadyOwnedByYou, NoSuchBucket, NoSuchKey, NoSuchUpload, ObjectAlreadyInActiveTierError, ObjectNotInActiveTierError
我正在尝试编写 "good" 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 *
也不起作用,我不想捕获一般错误。
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
使用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"
在 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)
< botocore.errorfactory.S3Exceptions object at 0x105e08c50 > object has no attribute 'InvalidBucketName'. Valid exceptions are: BucketAlreadyExists, BucketAlreadyOwnedByYou, NoSuchBucket, NoSuchKey, NoSuchUpload, ObjectAlreadyInActiveTierError, ObjectNotInActiveTierError