OSS Python SDK异常(OssError)分为三类:ClientError、RequestError和ServerError,这些异常定义在oss2.exceptions子模块中。

异常的变量、类型及描述如下表所示:

变量 类型 描述
status int
  • 如果为ServerError异常,则status为HTTP状态码。
  • 如果为ClientError和RequestError异常,则status为固定值。
request_id str
  • 如果为ServerError异常,则OSS服务器返回请求ID。
  • 如果为ClientError和RequestError异常,则request_id返回的是空字符串。
code和message str 对应OSS的错误响应格式里的Code和Message两个XML Tag中的文本。

异常处理示例

以下代码展示了下载一个不存在文件时的异常处理,并打印出错误信息的HTTP状态码和请求ID。

# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

try:
    stream = bucket.get_object('random-key.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 没有修改
AccessDenied 403 AccessDenied 拒绝访问
NoSuchBucket 404 NoSuchBucket 存储空间不存在
NoSuchKey 404 NoSuchKey 文件不存在
NoSuchUpload 404 NoSuchUpload 分片上传不存在
NoSuchWebsite 404 NoSuchWebsiteConfiguration 静态网站托管未配置
NoSuchLifecycle 404 NoSuchLifecycle 生命周期规则未配置
NoSuchCors 404 NoSuchCORSConfiguration 跨域资源共享未配置
BucketNotEmpty 409 BucketNotEmpty 存储空间非空
PositionNotEqualToLength 409 PositionNotEqualToLength 设置的追加位置和文件长度不等
ObjectNotAppendable 409 ObjectNotAppendable 不是可追加文件