2017-03-23 6 views
20

मैं "अच्छा" अजगर लिख सकते हैं और एक 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 का उपयोग करना, ऐसा लगता है कि ग्राहक संभाल अपवाद वर्गों को उजागर करता है:

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

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") 
संबंधित मुद्दे