Skip to main content

错误层级结构

两个 SDK 使用几乎完全一致的错误类层级。所有错误都继承自 KaleidoError
有一处差异需要注意:在 TypeScript 中 RateLimitError 继承 APIError,而在 Python 中它直接继承 KaleidoError —— Python 里的 except APIError 处理块捕获不到速率限制错误。

基类错误:KaleidoError

所有 SDK 错误都继承 KaleidoError,并带有以下属性:

各个错误类

APIError

在发生 HTTP 错误(状态码 400-599)时抛出。

RateLimitError

超出速率限制(HTTP 429)时抛出。在 TypeScript 中继承 APIError;在 Python 中直接继承 KaleidoError

NetworkError

在出现网络连接问题(DNS 解析失败、连接被拒等)时抛出。 始终可重试(isRetryable() 返回 true)。

ValidationError

在校验失败(HTTP 400、422)时抛出。包含对 FastAPI 校验错误的解析。

TimeoutError

在请求超时(HTTP 408、504)时抛出。 始终可重试。

WebSocketError

在 WebSocket 连接或通信出错时抛出。

NotFoundError

在资源不存在(HTTP 404)时抛出。

ConfigError

在 SDK 配置有问题(例如 URL 无效)时抛出。

SwapError

在交换操作失败时抛出。

NodeNotConfiguredError

当在未配置 node_url 的情况下执行 RLN 节点操作时,由 Python SDK 抛出。TypeScript 在未提供 nodeUrl 却调用 client.rln.* 方法时,改为抛出 ConfigError(“Node API not configured. Provide “nodeUrl” when creating the client.”)。

QuoteExpiredError

在尝试使用已过期的报价时抛出。

InsufficientBalanceError

在余额不足以完成所请求的操作时抛出。

完整的错误处理

重试模式

使用 isRetryable() 实现自动重试:

HTTP 错误映射

SDK 通过 mapHttpError / map_http_error 自动把 HTTP 错误映射为带类型的异常: 不要把这张表硬编码进你自己的重试逻辑,而应调用 isRetryable() / is_retryable() —— 它精确编码了这些规则,并会随映射关系的演进保持正确。