全部产品
对象存储 OSS

出错处理

更新时间:2017-06-07 13:26:11   分享:   

在程序运行过程中,如果遇到错误,Python SDK会抛出相应的异常。 一共有三类异常:ClientError、RequestError和ServerError,它们都是OssError的子类。 这些异常都在oss2.exceptions子模块中定义。

OssError一些重要的成员变量如下:

  • status:int类型。对于ServerError就是HTTP状态码;对于另外两类异常,该值为固定值。
  • request_id:str类型。对于ServerError就是OSS服务器返回请求ID;对于另外两类异常,该值为空字符串。
  • code和message:str类型。就是OSS的错误响应格式里的Code和Message两个XML Tag中的文本。

ClientError

ClientError是因用户的输入有误引起的。比如,Bucket.batch_delete_objects当收到空的文件名列表时,就会抛出该异常。 ClientError对象的status值是固定的oss2.exceptions.OSS_CLIENT_ERROR_STATUS。

RequestError

当底层的HTTP库抛出异常时,Python SDK会将其转换为RequestError。这些异常对象的status值是固定的oss2.exceptions.OSS_REQUEST_ERROR_STATUS。

ServerError

当OSS服务器返回4xx或5xx的HTTP错误码时,Python SDK会将OSS Server的响应转换为ServerError。 为了方便使用,根据status和code,还派生出了一些子类:

异常类 对应的HTTP状态码 OSS错误码 备注
NotModified 304 没有修改
AccessDenied 403 AccessDenied 拒绝访问
NoSuchBucket 404 NoSuchBucket Bucket不存在
NoSuchKey 404 NoSuchKey 文件名不存在
NoSuchUpload 404 NoSuchUpload 分片上传不存在
NoSuchWebsite 404 NoSuchWebsiteConfiguration 静态网站托管未配置
NoSuchLifecycle 404 NoSuchLifecycle 生命周期管理未配置
NoSuchCors 404 NoSuchCORSConfiguration CORS未配置
BucketNotEmpty 409 BucketNotEmpty Bucket非空
PositionNotEqualToLength 409 PositionNotEqualToLength Append的位置和文件长度不相等
ObjectNotAppendable 409 ObjectNotAppendable 不是可追加文件

另外,所有404状态码的异常都是NotFound的子类;所有409状态码的异常都是Conflict的子类。

注意 不是所有的OSS错误码都有对应的异常。目前只定义了比较常用的一些。

示例

下面的代码展示了下载一个文件时,如何处理文件名不存在的情形,并打印出HTTP状态码和请求ID:

# -*- coding: utf-8 -*-

import oss2

auth = oss2.Auth('您的AccessKeyId', '您的AccessKeySecret')
bucket = oss2.Bucket(auth, '您的Endpoint', '您的Bucket名')

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))
本文导读目录
本文导读目录
以上内容是否对您有帮助?