异常处理

最近更新时间:2026-01-22 17:15:02

我的收藏

简介

Python SDK 操作成功会返回一个 dict 或者 None。若调用 SDK 接口请求 COS Vectors 服务失败,系统将抛出 CosClientError(客户端异常)或者 CosServiceError (服务端异常)。
CosClientError 是由于客户端无法和 COS Vectors 服务端正常进行交互所引起。如客户端无法连接到服务端,无法解析服务端返回的数据等。
CosServiceError 是客户端和 COS Vectors 服务端交互正常,但操作 COS Vectors 资源失败。如客户端访问一个不存在的向量存储桶,删除一个不存在的索引,没有权限进行某个操作等。

客户端异常

CosClientError 一般指如 timeout 引起的客户端错误,用户捕获后可以选择重试或其它操作。

服务端异常

CosServiceError 提供服务端返回的具体信息,包含了服务端返回的状态码、request_id 和出错明细等。捕获异常后,建议对整个异常进行打印,异常包含了必须的排查因素。以下是异常成员变量的描述以及异常捕获示例。
成员
描述
类型
request_id
请求 ID,用于唯一标识一个请求,对于排查问题十分重要
string
status_code
response 的 HTTP 状态码,更多详情请参见 COS Vectors 错误码
string
error_code
请求失败时 body 返回的错误码名称,更多详情请参见 COS Vectors 错误码
string
error_msg
请求失败时 body 返回的错误具体信息,更多详情请参见 COS Vectors 错误码
dict

异常捕获示例

# -*- coding=utf-8
import sys
import os
from pprint import pprint
from qcloud_cos import CosServiceError
from qcloud_cos import CosConfig
from qcloud_cos import CosVectorsClient
import logging

# 正常情况日志级别使用 INFO,需要定位时可以修改为 DEBUG,此时 SDK 会打印和服务端的通信信息
logging.basicConfig(level=logging.INFO, stream=sys.stdout)

# 1. 设置用户属性, 包括 secret_id, secret_key, region 等。Appid 已在 CosConfig 中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成
secret_id = os.getenv("COS_VECTORS_SECRET_ID") # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
secret_key = os.getenv("COS_VECTORS_SECRET_KEY") # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
region = 'ap-guangzhou' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos/bucket
# COS 支持的所有 region 列表参见 https://cloud.tencent.com/document/product/436/6224
token = None # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048
scheme = 'http' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填

config = CosConfig(
Region=region,
SecretId=secret_id,
SecretKey=secret_key,
Scheme=scheme,
Domain="vectors.ap-guangzhou.coslake.com",
Token=token,
)
client = CosVectorsClient(config)

try:
resp, data = client.list_vector_buckets(
MaxResults=0 # 此处填0,不符合接口要求,将返回404格式错误
)
print('桶列表:', data)
except CosServiceError as e:
print(f'原始错误信息:{e.get_origin_msg()}') # 获取原始错误信息,格式为 dict
print(f'HTTP 状态码:{e.get_status_code()}') # 获取 HTTP 状态码(如4XX,5XX)
print(f'错误码:{e.get_error_code()}') # 获取 COS Vectors 定义的错误码
print(f'错误信息:{e.get_error_msg()}') # 获取 COS Vectors 返回的具体错误信息,格式为 dict
print(f'请求 ID:{e.get_request_id()}') # 获取请求的 request_id