SuperAPI AI 工具集

error-handling

编程与开发

查看项目

更新于 10-15 10:36

技能介绍

Error Handling Patterns 是一份面向生产应用的错误处理模式合集,目标是在 TypeScript、Python 和 Go 中实现一致、健壮的错误处理。

【适用时机】 资料列出以下触发场景:为新模块或服务设计错误类型或异常层级;为不可靠的外部依赖添加重试逻辑或断路器;审查 API 端点是否遗漏错误处理;实现面向用户的错误消息与反馈;调试级联失败或静默吞错问题。

【核心原则】

  1. 快速且响亮地失败——在错误发生的边界处暴露错误,不要掩埋。
  2. 类型化错误优于字符串消息——错误是具有结构的一等值。
  3. 用户消息 ≠ 开发者消息——向用户展示友好文本,在服务端记录完整上下文。
  4. 绝不静默吞掉错误——每个 catch 块必须处理、重新抛出或记录日志。
  5. 错误是 API 契约的一部分——为客户端可能收到的每个错误码编写文档。

【TypeScript / JavaScript】 提供类型化错误类:定义 AppError 基类,携带 code、statusCode、details 字段,并通过 Object.setPrototypeOf(this, new.target.prototype) 在转译后的 ES5 中维持正确的原型链,以保证 instanceof 检查有效。派生类包括 NotFoundError(404)、ValidationError(422,带字段级 details)、UnauthorizedError(401)、RateLimitError(429,携带 retryAfterMs)。 提供 Result 模式(无抛出风格):适用于失败属于预期且常见场景(如解析、外部调用),定义 Result<T, E> 为 { ok: true; value } 或 { ok: false; error } 的联合类型,并提供 ok() 与 err() 辅助函数,示例为 fetchUser 返回 Result 并在调用处通过类型收窄安全访问 value 或 error。 提供 API 错误处理器:在 Next.js / Express 中统一处理已知 AppError(返回对应 code、message、details 与 statusCode)、Zod 校验错误(映射为字段路径与消息的 422 响应),以及未知错误(服务端记录细节、对外返回通用 INTERNAL_ERROR 与 500)。 提供 React Error Boundary:类组件通过 getDerivedStateFromError 与 componentDidCatch 捕获渲染错误,支持 fallback 展示与 onError 回调。

【Python】 提供自定义异常层级:AppError 基类携带 code 与 status_code,派生 NotFoundError、ValidationError(含 details 列表)。 提供 FastAPI 全局异常处理器:通过 @app.exception_handler 分别注册 AppError 处理器(按 status_code 与错误信封返回)与通用 Exception 处理器(记录完整异常信息,对外返回通用 INTERNAL_ERROR)。

【Go】 提供哨兵错误与错误包装:以 errors.New 定义 ErrNotFound、ErrUnauthorized、ErrConflict 等哨兵错误;在仓储层用 fmt.Errorf 与 %w 包装底层错误并保留原始错误;在处理器层用 errors.Is 解包判定,映射为对应的 HTTP 状态码与错误响应,未知错误记录日志后返回通用提示。

【重试与退避】 提供 withRetry 函数,支持 maxAttempts、baseDelayMs、maxDelayMs 与 retryIf 选项,采用指数退避加随机抖动(jitter)并受最大延迟限制。示例展示了只重试非 4xx 的瞬时错误(retryIf 中排除 statusCode 小于 500 的 AppError)。

【用户可见错误消息】 提供错误码到人类可读文案的映射表(NOT_FOUND、UNAUTHORIZED、FORBIDDEN、VALIDATION_ERROR、RATE_LIMITED、INTERNAL_ERROR),以及 getUserMessage 函数,未知错误码回退到 INTERNAL_ERROR 文案。原则是技术细节不出现在用户可见文本中。

【合并前自查清单】 每个 catch 块都处理、重新抛出或记录日志,无静默吞错;API 错误遵循统一信封 { error: { code, message } };用户可见消息不含堆栈或内部细节;完整错误上下文记录在服务端;自定义错误类继承带 code 字段的 AppError 基类;异步函数把错误暴露给调用方,不做无兜底的 fire-and-forget;重试逻辑只重试可重试错误(不含 4xx 客户端错误);React 组件用 ErrorBoundary 包裹以处理渲染错误。

资料未提供该技能的安装命令、收费方式、价格与平台限制等事实。