7. 错误处理

7.1. 异常处理

调用Client类的相关接口时,如果抛出异常,则表明操作失败,否则操作成功。抛出异常时,方法返回的数据无效。SDK中所有异常均属于NOSException类,其下分为两个子类:ClientException、ServiceException。在调用PYTHON SDK接口的时候,捕捉这些异常并打印必要的信息有利于定位问题。

7.2. 异常处理实例

错误处理代码如下所示:

try:
    resp = client.XXX(bucket=bucket, key=key)
except nos.exceptions.ServiceException as e:
    print (
        "ServiceException: %s\n"
        "status_code: %s\n"
        "error_type: %s\n"
        "error_code: %s\n"
        "request_id: %s\n"
        "message: %s\n"
    ) % (
        e,
        e.status_code,  # 错误http状态码
        e.error_type,   # NOS服务器定义错误类型
        e.error_code,   # NOS服务器定义错误码
        e.request_id,   # 请求ID,有利于nos开发人员跟踪异常请求的错误原因
        e.message       # 错误描述信息
    )
except nos.exceptions.ClientException as e:
    print (
        "ClientException: %s\n"
        "message: %s\n"
    ) % (
        e,
        e.message       # 客户端错误信息
    )

7.3. NOSException

7.3.1. ClientException

ClientException包含SDK客户端的异常。比如,上传对象时对象名为空,就会抛出该异常。 ClientException类下有如下子类,用于细分客户端异常:

类名 抛出异常的原因
InvalidBucketName 传入的桶名为空
InvalidObjectName 传入的对象名为空
FileOpenModeError 出入的对象为文件且没有使用二进制文件方式打开
XmlParseError 解析服务端响应的XML内容失败
SerializationError 上传对象序列化失败
ConnectionError 连接服务端异常
ConnectionTimeout 连接服务端超时

7.3.2. ServiceException

ServiceException包含NOS服务器返回的异常。当NOS服务器返回4xx或5xx的HTTP错误码时,PYTHON SDK会将NOS Server的响应转换为ServiceException。 ServiceException类下有如下子类,用于细分NOS服务器返回的异常:

类名 抛出异常的原因
MultiObjectDeleteException 批量删除对象时,存在部分对象无法删除
BadRequestError 服务端返回HTTP 400响应
ForbiddenError 服务端返回HTTP 403响应
NotFoundError 服务端返回HTTP 404响应
MethodNotAllowedError 服务端返回HTTP 405响应
ConflictError 服务端返回HTTP 409响应
LengthRequiredError 服务端返回HTTP 411响应
RequestedRangeNotSatisfiableError 服务端返回HTTP 416响应
InternalServerErrorError 服务端返回HTTP 500响应
NotImplementedError 服务端返回HTTP 501响应
ServiceUnavailableError 服务端返回HTTP 503响应