O SDK do Object Storage Service (OSS) para Python retorna três tipos de exceções: ClientError, RequestError e ServerError. Essas exceções estão definidas no submódulo oss2.exceptions.
A tabela a seguir descreve as variáveis das exceções.
|
Variável |
Tipo |
Descrição |
|
status |
int |
|
|
request_id |
str |
|
|
code e message |
str |
Texto das tags XML Code e Message em uma resposta de erro do OSS. Para obter mais informações, consulte Respostas de erro. |
Exemplo de tratamento de exceções
O exemplo de código a seguir mostra como tratar uma exceção e exibir o código de status HTTP do erro e o ID da solicitação ao tentar baixar um objeto inexistente:
# -*- 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
A exceção ClientError ocorre devido a entradas incorretas no cliente. Por exemplo, esse erro surge ao usar o método bucket.batch_delete_objects e receber uma lista de objetos vazia. O valor de status para ClientError é oss2.exceptions.OSS_CLIENT_ERROR_STATUS.
RequestError
Quando a biblioteca HTTP gera um erro, o SDK do OSS para Python o converte em RequestError. O valor de status para RequestError é oss2.exceptions.OSS_REQUEST_ERROR_STATUS.
ServerError
Quando o servidor do OSS retorna um código de status HTTP, o SDK do OSS para Python o converte em ServerError. A classe ServerError deriva várias subclasses com base no código de status HTTP e no código de erro do OSS. A subclasse NotFound corresponde ao código de status HTTP 404. A subclasse Conflict corresponde ao código de status HTTP 409.
A tabela a seguir descreve os códigos de erro comuns.
|
Classe de exceção |
Código de status HTTP |
Código de erro do OSS |
Descrição |
|
NotModified |
304 |
Null |
O valor especificado para o parâmetro If-Modified-Since é posterior ao horário real de modificação do objeto. |
|
InvalidArgument |
400 |
InvalidArgument |
Um corpo de solicitação foi especificado em uma solicitação de upload multipartido em que x-oss-complete-all foi definido como yes. Nesse cenário, não é permitido especificar o corpo da solicitação; caso contrário, ocorrerá um erro. |
|
AccessDenied |
403 |
AccessDenied |
Você não tem as permissões necessárias. |
|
NoSuchBucket |
404 |
NoSuchBucket |
O bucket especificado não existe. |
|
NoSuchKey |
404 |
NoSuchKey |
O objeto especificado não existe. |
|
NoSuchUpload |
404 |
NoSuchUpload |
O upload do objeto não foi concluído em uma solicitação de upload multipartido ou upload retomável. |
|
NoSuchWebsite |
404 |
NoSuchWebsiteConfiguration |
O bucket especificado não tem configurações de hospedagem de site estático. |
|
NoSuchLifecycle |
404 |
NoSuchLifecycle |
Nenhuma regra de ciclo de vida está configurada para o bucket especificado. |
|
NoSuchCors |
404 |
NoSuchCORSConfiguration |
Não há regras de compartilhamento de recursos de origem cruzada (CORS) configuradas no bucket especificado. |
|
BucketNotEmpty |
409 |
BucketNotEmpty |
O bucket a ser excluído contém objetos, partes geradas por tarefas de upload multipartido incompletas ou LiveChannels. |
|
PositionNotEqualToLength |
409 |
PositionNotEqualToLength |
O valor de position na solicitação não corresponde ao tamanho atual do objeto. |
|
ObjectNotAppendable |
409 |
ObjectNotAppendable |
O objeto atual não permite anexação. |