OSS Python SDK异常(OssError)分为三类:ClientError、RequestError和ServerError,这些异常定义在oss2.exceptions子模块中。
异常的变量、类型及描述如下表所示:
变量 |
类型0 |
描述 |
status |
int |
|
request_id |
str |
|
code和message |
str |
对应 OSS的错误响应格式 里的Code和Message两个XML Tag中的文本。 |
异常处理示例
以下代码展示了下载一个不存在文件时的异常处理,并打印出错误信息的HTTP状态码和请求ID。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
// 填写下载的文件名称,例如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
ClientError是由于客户端输入有误引起的。例如,使用bucket.batch_delete_objects方法时,如果收到空的文件列表,会抛出该异常。ClientError的status值是oss2.exceptions.OSS_CLIENT_ERROR_STATUS。
RequestError
当HTTP库抛出异常时,Python SDK会将其转换为RequestError。RequestError的status值是oss2.exceptions.OSS_REQUEST_ERROR_STATUS。
ServerError
当OSS服务器返回HTTP错误码时,Python SDK会将其转换为ServerError。ServerError根据HTTP状态码和OSS错误码派生出多个子类。其中NotFound子类对应所有404异常,Conflict子类对应所有409异常。
下表列出了常见的错误码:
异常类 |
HTTP状态码 |
OSS错误码 |
描述 |
NotModified |
304 |
空 |
使用条件下载时,通过If-Modified-Since参数指定的时间晚于Object实际修改时间。 |
InvalidArgument |
400 |
InvalidArgument |
分片上传时如果指定了x-oss-complete-all:yes,则不允许继续指定body,否则报错。 |
AccessDenied |
403 |
AccessDenied |
没有相应的访问权限。 |
NoSuchBucket |
404 |
NoSuchBucket |
Bucket不存在。 |
NoSuchKey |
404 |
NoSuchKey |
文件不存在。 |
NoSuchUpload |
404 |
NoSuchUpload |
分片上传或者断点续传时,部分分片上传成功,但最终未完成上传。 |
NoSuchWebsite |
404 |
NoSuchWebsiteConfiguration |
Bucket未配置静态网站托管。 |
NoSuchLifecycle |
404 |
NoSuchLifecycle |
Bucket未配置生命周期规则。 |
NoSuchCors |
404 |
NoSuchCORSConfiguration |
Bucket未配置跨域资源共享。 |
BucketNotEmpty |
409 |
BucketNotEmpty |
要删除的Bucket中存在未删除的Object、未完成的分片上传任务或Livechannel。 |
PositionNotEqualToLength |
409 |
PositionNotEqualToLength |
Position的值和当前Object的长度不一致。 |
ObjectNotAppendable |
409 |
ObjectNotAppendable |
当前文件不是Appendable类型。 |