La documentation de boto3 indique que l'erreur S3.Client.exceptions.NoSuchKey
se produira si l'objet n'existe pas lors de la récupération d'un objet S3 avec boto3 en Python. Cependant, je ne savais pas comment détecter cette erreur en Python, alors je l'ai essayée et étudiée.
Pour une raison quelconque, le comportement de get_object
et head_object
était différent.
get_object
J'ai pu détecter l'erreur avec les deux modèles de code suivants.
import boto3
s3_bucket = "..."
s3_key = "..."
session = boto3.session.Session()
s3_client = session.client("s3")
try:
s3_client.get_object(
Bucket = s3_bucket,
Key = s3_key,
)
except s3_client.exceptions.NoSuchKey as e:
"NOT FOUND ERROR!"
import boto3
import botocore.exceptions
s3_bucket = "..."
s3_key = "..."
session = boto3.session.Session()
s3_client = session.client("s3")
try:
s3_client.get_object(
Bucket = s3_bucket,
Key = s3_key,
)
except botocore.exceptions.ClientError as e:
if e.response["Error"]["Code"] == "NoSuchKey":
"NOT FOUND ERROR!"
else:
raise
head_object
J'ai pu détecter l'erreur avec le code suivant.
Je ne pouvais même pas essayer s3_client.exceptions.NoSuchKey
en imitant get_object
.
La capture avec ClientError
est également différente de get_object
pour une raison quelconque car la chaîne de caractères de Code
l'est.
import boto3
import botocore.exceptions
s3_bucket = "..."
s3_key = "..."
session = boto3.session.Session()
s3_client = session.client("s3")
try:
s3_client.head_object(
Bucket = s3_bucket,
Key = s3_key,
)
except botocore.exceptions.ClientError as e:
if e.response["Error"]["Code"] == "404":
"NOT FOUND ERROR!"
else:
raise
$ pip list | grep boto
boto3 1.14.63
botocore 1.17.63
Recommended Posts