错误处理

异常处理

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

异常处理实例

错误处理代码如下所示:

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       # 客户端错误信息
    )

NOSException

ClientException

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

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

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响应