SuperAPI AI 工具集

error_handling

编程与开发

查看项目

更新于 10-16 10:12

技能介绍

本技能面向需要在多语言环境中实现健壮错误处理的开发者,定位为错误处理模式的系统化参考。

一、用途 用于在新功能中实现错误处理、设计具备错误弹性的 API、排查生产问题、提升应用可靠性、为开发者与用户提供更好的错误信息、实现重试与熔断模式、处理异步/并发错误,以及构建容错的分布式系统。

二、核心概念

  1. 错误处理哲学:异常(传统 try-catch,会打断控制流)、Result 类型(显式成功/失败,函数式方式)、错误码(C 风格,需要纪律约束)、Option/Maybe 类型(用于可空值)。 适用场景区分:异常用于意外错误与异常条件;Result 类型用于预期错误与校验失败;panic/崩溃用于不可恢复错误与程序缺陷。
  2. 错误分类:可恢复错误包括网络超时、文件缺失、非法用户输入、API 限流;不可恢复错误包括内存耗尽、栈溢出、编程缺陷(如空指针)。

三、语言特定模式 Python:自定义异常层级(ApplicationError 基类,含 code、details、timestamp;ValidationError、NotFoundError、ExternalServiceError 派生)、用于清理的上下文管理器(如数据库事务的提交/回滚/关闭)、带指数退避的重试装饰器(max_attempts、backoff_factor、exceptions,逐次递增 sleep 后抛出)。 TypeScript/JavaScript:自定义错误类(ApplicationError 含 message、code、statusCode、details,并使用 Error.captureStackTrace;ValidationError、NotFoundError 派生);Result 类型模式(Result<T, E> 联合类型,Ok/Err 辅助函数,解析 JSON 返回 Result,消费与链式处理);异步错误处理(async/await 中按错误类型分别处理 NotFoundError 返回空数组、NetworkError 触发重试、其余重新抛出;Promise 链式错误处理)。 Rust:Result 与 Option 类型;read_file 使用 ? 运算符传播错误;自定义错误枚举 AppError(Io/Parse/NotFound/Validation)并实现 From 转换;map_err 显式转换;Option 用于可空值,ok_or_else 在 Option 与 Result 间组合。 Go:显式返回错误(fmt.Errorf 配合 %w 包装);自定义错误类型(ValidationError 结构体实现 Error());哨兵错误(ErrNotFound、ErrUnauthorized、ErrInvalidInput)用于比较;errors.Is 与 errors.As 的检查与解包。

四、通用模式

  1. 熔断器:通过 CLOSED/OPEN/HALF_OPEN 状态与 failure_threshold、timeout、success_threshold 控制,防止分布式系统级联失败。
  2. 错误聚合:ErrorCollector 收集多个错误,而非遇首个错误即失败;校验多个字段后统一抛出,单错误直接抛出,多错误抛出 AggregateError。
  3. 优雅降级:with_fallback 先试主函数、失败回退备选;多级回退示例中按 API 提供方、缓存、默认值依次尝试。

五、最佳实践与常见陷阱 最佳实践:失败快速(尽早校验输入)、保留上下文(堆栈、元数据、时间戳)、消息有意义、合理记录日志(错误记日志、预期失败不刷屏)、在能有效处理的层级捕获、清理资源(try-finally、上下文管理器、defer)、不要吞掉错误、尽量使用类型安全的错误。文中还给出综合示例:处理订单时校验输入、查询订单、调用支付、更新状态,并对已知应用错误重新抛出、对意外错误记录后包装为 ApplicationError。 常见陷阱:捕获范围过宽、空 catch 块、既记录又重抛导致重复日志、未清理资源、错误消息无意义、返回错误码、忽略异步错误。

六、限制 资料未提供该技能的具体安装方式、依赖、收费、价格、平台支持与效果数据,暂未提供。