错误层级结构
两个 SDK 使用几乎完全一致的错误类层级。所有错误都继承自KaleidoError:
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() —— 它精确编码了这些规则,并会随映射关系的演进保持正确。