In der boto3-Dokumentation heißt es, dass der Fehler "S3.Client.exceptions.NoSuchKey" auftritt, wenn das Objekt beim Abrufen eines S3-Objekts mit boto3 in Python nicht vorhanden ist. Ich wusste jedoch nicht, wie ich diesen Fehler in Python abfangen sollte, also habe ich es versucht und untersucht.
Aus irgendeinem Grund war das Verhalten von "get_object" und "head_object" unterschiedlich.
get_object
Ich konnte den Fehler mit den folgenden zwei Codemustern abfangen.
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
Ich konnte den Fehler mit dem folgenden Code abfangen.
Ich konnte nicht einmal s3_client.exceptions.NoSuchKey
ausprobieren, indem ich get_object
imitierte.
Der Haken bei "ClientError" unterscheidet sich aus irgendeinem Grund auch von "get_object", da die Zeichenfolge von "Code" lautet.
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