2017-03-23 11 views
20

私は「良い」のpythonを書き、これにはそのようなキーエラーS3をキャプチャしないようにしようとしている:ボトコアのNoSuchKey例外をキャプチャする方法は?

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 *はどちらか動作しませんし、私は一般的なエラーをキャプチャする必要はありません。

答えて

27
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 ex 
12

botocore 1.5を使用して、クライアントハンドルは、例外クラスを公開して次のようになります。boto3で

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" 
1

が、私は、リソースのメタクライアントで例外にアクセスすることができました。

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") 
関連する問題