⚠️ 错误模型
错误分类
ICP Skills 把错误分为三类,调用方可按类型决定是否重试:
| 类别 | 含义 | 可重试 | 退出码 |
|---|---|---|---|
ErrInput | 输入非法(空公司名、畸形域名) | ❌ | 2 |
ErrUpstream | 上游数据源错误(限速、5xx、超时) | ✅ 部分可 | 3 |
ErrConfig | 配置/凭证缺失 | ❌ | 4 |
外加一类 ErrPartial:查询部分成功、部分降级,结果带 confidence=low。
Go 错误用法
go
import "github.com/cyberspacesec/go-icp/sdk"
err := client.QueryCompany(ctx, name).Err()
switch {
case errors.Is(err, sdk.ErrInput):
// 输入问题,不要重试
case errors.Is(err, sdk.ErrUpstream):
// 上游问题,可指数退避重试
case errors.Is(err, sdk.ErrConfig):
// 凭证/配置缺失
}重试语义
ErrUpstream中区分「可重试」(限速、临时 5xx)与「终态」(鉴权失败、配额永久耗尽)- 重试由编排层统一执行,调用方无需手写
- 见 🛡️ 反爬与限速
降级 ≠ 报错
主路径失败但补全路径成功时,不返回错误,返回带 confidence=low 的结果 + 一条 warning。调用方按需过滤。
CLI 退出码
| 退出码 | 含义 |
|---|---|
| 0 | 成功 |
| 2 | 输入错误 |
| 3 | 上游错误 |
| 4 | 配置错误 |
| 5 | 部分成功(有降级) |