7. 错误处理

7.1. 异常处理

调用Client类的相关接口时,如果抛出异常,则表明操作失败,经过网络的异常使用ClientError接收,由SDK检查的异常使用BotoCoreError的子类接收

7.2. ClientError异常处理实例

错误处理代码如下所示:

try:
    resp = client.XXX(bucket=bucket, key=key)
except botocore.exceptions.ClientError as e:
    print(
        "Exception: %s\n"
        "status_code: %s\n"
        "error_code: %s\n"
        "request_id: %s\n"
        "message: %s\n"
    % (
        e,
        e.response['ResponseMetadata']['HTTPStatusCode'],  # 错误http状态码
        e.response["Error"]['Code'],  # NOS服务器定义错误类型
        e.response['ResponseMetadata']['HTTPHeaders']['x-nos-request-id'],  # NOS服务器定义错误码
        e.response['Error']['Message'],  # 请求ID,有利于nos开发人员跟踪异常请求的错误原因
    ))

7.3. 其他比较常见的异常处理类

这些类都是BotoCoreError的子类,可以理解为客户端设置有问题的异常类:

类名 抛出异常的原因
InvalidS3AddressingStyleError 传入的地址类型不支持
ParamValidationError 参数的正确性异常,比如桶名的格式
InvalidRetryConfigurationError 无效的重试配置
InvalidDNSNameError 桶名和DNS命名方式不兼容