温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

异常处理最佳实践

发布时间:2026-10-06 14:54:00 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

异常处理是软件开发中保证系统健壮性、可维护性和可观测性的关键环节。下面从设计原则、编码实践、常见反模式、不同语言要点、运维与观测几个层面,系统总结异常处理的最佳实践。


一、核心设计原则

1. 区分“错误类型”

  • 可恢复错误(业务异常):如参数校验失败、余额不足 → 应被捕获并处理
  • 不可恢复错误(系统异常):如 OOM、栈溢出 → 通常不应捕获
  • 预期异常 vs 非预期异常
    • 预期:调用方应知道并处理
    • 非预期:记录日志 + 向上抛出

2. 异常应“早抛出,晚捕获”

  • 在问题发生点立即抛出,保留上下文
  • 在能真正处理异常的层级捕获(如 Controller / Service 边界)

3. 不要吞掉异常

try {
    doSomething();
} catch (Exception e) {
    // ❌ 错误示例
}

至少应记录日志或重新抛出。


二、编码层面最佳实践

1. 使用特定异常,而非通用 Exception

// ❌
throw new Exception("error");

// ✅
throw new IllegalArgumentException("userId must not be null");

2. 异常信息要有“上下文”

  • 包含关键参数
  • 避免只写 “error occurred”
throw new RuntimeException(
    "Failed to update order, orderId=" + orderId
);

3. 优先使用不可变异常 + 原因链

catch (SQLException e) {
    throw new OrderSaveException("save order failed", e);
}

4. 不要在 finally 中吞异常或 return

// ❌
finally {
    return result; // 会掩盖异常
}

5. 使用 try-with-resources / using

try (InputStream in = new FileInputStream(file)) {
    ...
}

三、业务系统常见实践

1. 统一异常结构(推荐)

{
  "code": "ORDER_NOT_FOUND",
  "message": "订单不存在",
  "traceId": "abc123"
}

2. 分层异常处理建议

  • DAO 层:抛出原始异常或封装为数据访问异常
  • Service 层:业务异常(可被调用方理解)
  • Controller 层:统一拦截,转换为 HTTP 响应

3. 全局异常处理器(如 Spring)

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(BusinessException.class)
    public Result handle(BusinessException e) {
        return Result.fail(e.getCode(), e.getMessage());
    }
}

四、常见反模式(避坑)

反模式 问题
捕获 Exception 后忽略 隐藏 bug
用异常做流程控制 性能差、可读性差
在每个方法都 try-catch 代码臃肿
把异常当返回值 破坏语义
暴露底层异常给前端 安全风险

五、不同语言注意点(简要)

  • Java:受检异常慎用,优先运行时异常
  • Python:少用 broad except,使用 logging
  • Go:error 是值,显式处理,不滥用 panic
  • JavaScript:区分 reject 与 throw,async/await 配 try-catch

六、可观测性建议

  • 异常必须带 traceId / requestId
  • 关键异常接入告警(如 5xx、DB 异常)
  • 日志级别合理:
    • ERROR:影响业务
    • WARN:可恢复
    • INFO:流程节点

如果你有具体语言(Java / Python / Go / JS)或使用场景(Web / 微服务 / 脚本),我可以给你更针对性的异常规范或模板。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手