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