用途:为 Data Formulator(DF)提供统一错误处理规范,适用于新增 API 端点、修改错误处理逻辑、添加前端 API 调用以及编写错误相关测试。使用前需先阅读 docs/dev-guides/7-unified-error-handling.md;涉及日志、凭据、外部服务或 DataLoader 时还需阅读 docs/dev-guides/2-log-sanitization.md。若引入新的错误处理模式或约定,应同步更新该文件与相关开发指南。
主要能力:后端提供 ErrorCode 枚举与 AppError 异常,error_handler.py 提供 register_error_handlers、classify_and_wrap_llm_error、stream_error_event;前端提供 apiClient.ts 的 apiRequest、streamRequest、parseStreamLine,errorHandler.ts 的 handleApiError,以及 errorCodes.ts 的 getErrorMessage。协议约定:非流式业务/校验错误返回 HTTP 200 加 status:"error" 结构化错误体;认证错误返回 401/403;流式预检错误返回 200 JSON,流中致命错误以 NDJSON 行 {"type":"error","error":...} 表示。新代码不应使用 400/422 表示应用校验错误。
使用方式:非流式端点用 json_ok() 返回成功、raise AppError 返回错误;流式端点校验须放在生成器外,运行时异常用 stream_error_event 包装。前端用 apiRequest/streamRequest 配合 handleApiError,支持 onAuth、onRetryable、silent 回调。新增错误码需在 errors.py、errorCodes.ts 及 en/zh 语言文件中同步添加。数据库与连接器错误分别使用 classify_and_raise_db_error、classify_and_raise_connector_error。
限制与注意:文件下载、CSV 流、SPA 回退、OIDC 重定向、第三方 URL 及流已开始后的错误不适用常规 JSON 协议。所有 JSON 错误含 request_id 与 X-Request-Id 头,生产环境不得暴露原始异常文本或堆栈。日志需用 sanitize_url、sanitize_params、redact_token 及 SensitiveDataFilter 脱敏,LOG_SANITIZE=false 仅限本地调试。空 catch 需按决策树处理,AbortError 应过滤。