异常处理

MSS Python SDK 在程序运行时,可能遇到无法处理的错误而抛出异常。MSS Python SDK 主要存在三大类异常:底层 HTTP 异常、MSS Server 异常和 MSS Cilent 异常。

底层HTTP异常

MSS Python SDK 依赖的 HTTP 库在建立连接、发送请求和接收请求时可能会抛出异常,MSS Python SDK 将此类异常称之为底层 HTTP 库异常。
底层 HTTP 异常——HTTPException 定义在 mssapi.compact.http_client 包中,具体 HTTP 异常解释请参考 httplib 库官方文档

MSS Server异常

MSS 服务返回的 HTTP 错误码为 4xx 或者 5xx 时,MSS Python SDK 会将这些响应转换为 mssapi.exception.MssapiServerError 对象,并抛出异常。
MssapiServerError 对象包含的几个重要属性:

  • status : HTTP 状态码
  • reason : HTTP 状态码原因短语
  • error_code : MSS 的错误码
  • message : MSS 的错误消息,详细描述了引发错误的信息
  • request_id : MSS 请求标识

MSS中几个常见的错误码:

error_code message status 备注
AccessDenied Access Denied. 403 拒绝访问
BucketAlreadyExists The requested bucket name is not available. 409 bucket 已经存在
NoSuchBucket The specified bucket does not exist. 404 bucket 不存在
InternalError We encountered an internal error, please try again. 500 MSS 内部服务错误
InvalidArgument Invalid Argument. 400 非法请求参数
InvalidURI Couldn't parse the specified URI. 400 非法URI


注:MSS其他错误码详情请参考MSS错误码一节。 MSS Server 异常处理的例子:

from mssapi.exception import MssapiServerError, MssapiClientError

def mss_client_get_bucket(conn, name):
    try:
        b = conn.get_bucket(name)
    except MssapiServerError as e:
        if e.error_code == 'NoSuchBucket':
            b = conn.create_bucket(name)
        else:
            raise e
    return b

try:
    mss_client_get_bucket(conn, '您要获取的bucket名字')
except MssapiClientError as e:
    print "client error: %s" % e.reason
except MssapiServerError as e:
    print "request error: status=%s reason=%s error_code=%s message=%s req_id=%s" % (e.status, e.code, e.error_code, e.message, e.request_id)
except Exception as e:
    print e

MSS Client异常

MSS Client 异常主要包含相关 client 设置和请求参数的异常,比如:

  • Python 版本错误
  • 接口参数错误
  • 接口未实现
  • bucket 名字不符合 MSS 的要求

此类错误的详情,请参考 mssapi.exception.MssapiClientError 对象的 reason 字段: MssapiClientError示例:

from mssapi.exception import MssapiClientError

try:
    raise MssapiClientError('Python 版本错误')
except MssapiClientError as e:
    print "exception: %s" % e
    print "exception reason: %s" % e.reason

注意:如果配置错误或者提供的接口参数非法,除了 MssapiClientError 异常,MSS Python SDK 可能会抛出以下几种系统定义的异常:
1、ValueError

  • 创建/删除对象时,没有提供对象名字
  • 分片上传时,提供的part number小于1

2、TypeError

  • 存在不支持的命名参数