开发者社区> 问答> 正文

Python-SDK之如何实现出错处理?

在程序运行过程中,如果遇到错误,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错误码备注
NotModified304没有修改
AccessDenied403AccessDenied拒绝访问
NoSuchBucket404NoSuchBucketBucket不存在
NoSuchKey404NoSuchKey文件名不存在
NoSuchUpload404NoSuchUpload分片上传不存在
NoSuchWebsite404NoSuchWebsiteConfiguration静态网站托管未配置
NoSuchLifecycle404NoSuchLifecycle生命周期管理未配置
NoSuchCors404NoSuchCORSConfigurationCORS未配置
BucketNotEmpty409BucketNotEmptyBucket非空
PositionNotEqualToLength409PositionNotEqualToLengthAppend的位置和文件长度不相等
ObjectNotAppendable409ObjectNotAppendable不是可追加文件

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

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


示例


下面的代码展示了下载一个文件时,如何处理文件名不存在的情形,并打印出HTTP状态码和请求ID:# -*- coding: utf-8 -*-import oss2auth = 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))

展开
收起
青衫无名 2017-10-18 11:44:04 3016 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Python系列直播第一讲——Python中的一切皆对象 立即下载
Python 脚本速查手册 立即下载
Python第五讲——关于爬虫如何做js逆向的思路 立即下载