prosource

봇코어의 NoSuchKey 예외를 캡처하는 방법은 무엇입니까?

probook 2023. 7. 2. 20:49
반응형

봇코어의 NoSuchKey 예외를 캡처하는 방법은 무엇입니까?

저는 "좋은" 파이썬을 작성하고 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

봇코어 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")

제가 생각하기에 가장 우아한 방법은 보토3입니다.

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)

< bootocore.errorfactory.S30x105e08c50의 예외 개체 > 개체에 'InvalidBucketName' 특성이 없습니다.유효한 예외는 다음과 같습니다. 버킷 이미존재함, 버킷 이미 소유자사용자, 해당 버킷 없음, 해당 키 없음, 해당 업로드 없음, 개체가 이미 있음InActive Tier 오류, 개체 NotActive Tier 오류

언급URL : https://stackoverflow.com/questions/42975609/how-to-capture-botocores-nosuchkey-exception

반응형