How to capture botocore's NoSuchKey exception?

后端 未结 4 1389
时光说笑
时光说笑 2021-01-30 15:37

I\'m trying to write \"good\" python and capture a S3 no such key error with this:

session = botocore.session.get_session()
client = session.create_client(\'s3\'         


        
相关标签:
4条回答
  • 2021-01-30 15:57

    Using botocore 1.5, it looks like the client handle exposes the exception classes:

    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"
    
    0 讨论(0)
  • 2021-01-30 15:58

    In boto3, I was able to access the exception in resource's meta client.

    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")
    
    0 讨论(0)
  • 2021-01-30 15:59
    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
    
    0 讨论(0)
  • 2021-01-30 16:11

    I think the most elegant way to do this is in Boto3 is

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

    The documentation on error handling seems sparse, but the following prints the error codes this works for:

    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

    0 讨论(0)
提交回复
热议问题