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.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"
# examplebucket填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
try:
# 填写下载的文件名称,例如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类型。 |