2017-10-21 44 views
1

Quelle est la meilleure façon de gérer les erreurs lors de l'obtention d'un objet à partir de S3 en utilisant Python boto3?boto3 S3: gestion des erreurs get_object

Mon approche:

from botocore.exceptions import ClientError 
import boto3 

s3_client = boto3.client('s3') 

try: 
    s3_object = s3_client.get_object("MY_BUCKET", "MY_KEY") 
except ClientError, e: 
    error_code = e.response["Error"]["Code"] 
    # do error code checks here 

Je ne sais pas si ClientError est la meilleure exception à utiliser ici. Je sais qu'il existe une classe Boto3Error, mais je ne pense pas que vous puissiez effectuer des vérifications de code d'erreur similaires à ClientError.

Répondre

0

Je pense que votre approche est suffisante. Si vous pouvez restreindre vos erreurs à quelques-uns, vous pouvez les décomposer en blocs if et les gérer en conséquence.

except ClientError as e: 
    error_code = e.response["Error"]["Code"] 
    if error_code == "AccessDenied": 
     # do code 
    elif error_code == "InvalidLocationConstraint": 
     # do more code 

Ceci est juste une approche expérimentale. Parce que la plupart des réponses d'erreur sont pilotées par API, je ne pense pas que vous les trouverez n'importe où directement dans le code (c'est-à-dire: faire except AccessDenied:). Vous pouvez trouver tous les error responses for Amazon S3 here.