Le SDK Object Storage Service (OSS) pour Python renvoie trois types d'exceptions : ClientError, RequestError et ServerError. Ces exceptions sont définies dans le sous-module oss2.exceptions.
Le tableau suivant décrit les variables associées aux exceptions.
|
Variable |
Type |
Description |
|
status |
int |
|
|
request_id |
str |
|
|
code and message |
str |
Le texte contenu dans les balises XML Code et Message d'une réponse d'erreur OSS. Pour plus d'informations, consultez Réponses d'erreur. |
Exemple de gestion des exceptions
L'exemple de code suivant montre comment gérer une exception et afficher le code d'état HTTP de l'erreur ainsi que l'ID de la requête lors de la tentative de téléchargement d'un objet inexistant :
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from the environment variables. Before you run the sample code, make sure that you have configured environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
try:
# Specify the name of the downloaded object. Example: exampleobject.txt.
stream = bucket.get_object('exampleobject.txt')
except oss2.exceptions.NoSuchKey as e:
print('status={0}, request_id={1}'.format(e.status, e.request_id))
ClientError
Une exception ClientError survient en raison d'une saisie incorrecte côté client. Par exemple, cette erreur se produit lorsque vous utilisez la méthode bucket.batch_delete_objects avec une liste d'objets vide. La valeur de status pour ClientError est oss2.exceptions.OSS_CLIENT_ERROR_STATUS.
RequestError
Lorsque la bibliothèque HTTP génère une erreur, le SDK OSS pour Python la convertit en RequestError. La valeur de status pour RequestError est oss2.exceptions.OSS_REQUEST_ERROR_STATUS.
ServerError
Lorsque le serveur OSS renvoie un code d'état HTTP, le SDK OSS pour Python le convertit en ServerError. La classe ServerError possède plusieurs sous-classes dérivées selon le code d'état HTTP et le code d'erreur OSS. La sous-classe NotFound correspond au code d'état HTTP 404. La sous-classe Conflict correspond au code d'état HTTP 409.
Le tableau suivant décrit les codes d'erreur courants.
|
Classe d'exception |
Code d'état HTTP |
Code d'erreur OSS |
Description |
|
NotModified |
304 |
Null |
La valeur spécifiée pour le paramètre If-Modified-Since est postérieure à la date réelle de modification de l'objet. |
|
InvalidArgument |
400 |
InvalidArgument |
Le corps de la requête est spécifié dans une requête de téléchargement multipart pour laquelle x-oss-complete-all est défini sur yes. Dans ce cas, le corps de la requête ne doit pas être spécifié, sous peine de générer une erreur. |
|
AccessDenied |
403 |
AccessDenied |
Vous ne disposez pas des autorisations requises. |
|
NoSuchBucket |
404 |
NoSuchBucket |
Le bucket spécifié n'existe pas. |
|
NoSuchKey |
404 |
NoSuchKey |
L'objet spécifié n'existe pas. |
|
NoSuchUpload |
404 |
NoSuchUpload |
L'objet n'est pas entièrement téléchargé dans le cadre d'une requête de téléchargement multipart ou de reprise. |
|
NoSuchWebsite |
404 |
NoSuchWebsiteConfiguration |
Le bucket spécifié ne comporte aucune configuration d'hébergement de site statique. |
|
NoSuchLifecycle |
404 |
NoSuchLifecycle |
Aucune règle de cycle de vie n'est configurée pour le bucket spécifié. |
|
NoSuchCors |
404 |
NoSuchCORSConfiguration |
Aucune règle de partage de ressources cross-origin (CORS) n'est configurée pour le bucket spécifié. |
|
BucketNotEmpty |
409 |
BucketNotEmpty |
Le bucket à supprimer contient des objets, des parties générées par des tâches de téléchargement multipart incomplètes ou des LiveChannels. |
|
PositionNotEqualToLength |
409 |
PositionNotEqualToLength |
La valeur de position dans la requête ne correspond pas à la taille actuelle de l'objet. |
|
ObjectNotAppendable |
409 |
ObjectNotAppendable |
L'objet actuel n'est pas un objet pouvant faire l'objet d'un ajout. |