OSS Python SDK异常(OssError)分为三类:ClientError、RequestError和ServerError,这些异常定义在oss2.exceptions子模块中。
异常的变量、类型及描述如下表所示:
变量 | 类型 | 描述 |
---|---|---|
status | int |
|
request_id | str |
|
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 | 不是可追加文件 |