悦省 ← 返回提示词库

AI / 编程与调试

审查错误处理

找出被吞掉的异常和无法诊断的报错

审查下面这段代码的错误处理。只关注失败路径:1)哪些异常被吞掉或降级成了默认值,出问题时会不会静默出错;2)错误信息是否足以定位(有没有带上关键 id、入参、上游状态);3)哪些重试是不安全的(非幂等、会重复扣款或重复写入);4)哪些地方该失败却继续跑,哪些该继续却整个中断;5)给出修改后的关键片段。

```
[粘贴代码]
```
使用建议

重点看它标出的静默失败:这类 bug 上线后最难发现,也最难回溯。

适合什么场景

  • 线上出现「没报错但数据不对」,日志里什么都没有。
  • 要接支付、退款或消息队列,失败路径的代价远高于正常路径。

不适合的场景

  • 代码是一次性脚本或 CLI 工具:吞掉异常继续跑是合理选择,不必按服务标准审。
  • 问题在重试策略的整体设计(队列、死信、退避),不在单个 try/catch:先看架构。

示例

输入
def charge(order_id, amount):
    try:
        resp = payment.charge(order_id, amount)
        db.update(order_id, status="paid")
        return True
    except Exception:
        return False
你会得到
指出 `except Exception` 吞掉全部异常且不打日志,失败原因不可诊断;payment 成功但 db.update 失败会重复扣款,因为既没有幂等键也没有事务边界;返回 bool 让调用方无法区分「余额不足」和「网络超时」。改法:记录 order_id、amount 和上游错误码,用幂等键,并先写本地状态再确认。

常见误用

  • 只让它「加点日志」,不区分「该失败」和「该重试」:日志补上了,语义仍然是错的。
  • 贴的代码里原始异常已经被 `str(e)` 压成字符串,它看不到错误类型,只能给通用建议。

可以这样改

  • 加「按『用户会损失钱 / 会看到错误 / 只是少一条统计』三档排优先级」,输出能直接排期。
  • 要求「给每处失败对应的用户可见文案」,能逼出「静默失败」的具体场景。

同方向的其他提示词