按项目规范实现错误处理与日志记录。适用于 API 异常、业务错误、日志打点,便于排查问题。
from tkms.exception.api import ApiException
# 抛出业务异常,会返回给前端
raise ApiException(code=400, message="用户不存在")
raise ApiException(code=401, message="未登录")
raise ApiException(code=403, message="无权限")
raise ApiException(code=404, message="资源不存在")
raise ApiException(code=500, message="服务器内部错误")
code:HTTP 状态码或业务错误码message:返回给前端的错误信息,避免暴露内部细节if not user_id:
raise ApiException(code=400, message="用户ID不能为空")
if page < 1:
raise ApiException(code=400, message="页码必须大于0")
user = await self.user_dao.get_by_id(user_id)
if not user:
raise ApiException(code=404, message="用户不存在")
try:
result = await external_api.call()
except ConnectionError as e:
raise ApiException(code=502, message="服务暂时不可用")
except Exception as e:
# 记录详细日志,对外返回通用信息
logger.exception("调用外部服务失败")
raise ApiException(code=500, message="操作失败,请稍后重试")
logger.info("接口名 入参")logger.info("步骤 结果")logger.exception("异常描述") 或 logger.error("...")import logging
logger = logging.getLogger(__name__)
# 入口
logger.info("get_user_list", extra={"user_id": user_id, "page": page})
# 业务节点
logger.info("查询完成", extra={"count": len(rows)})
# 异常
logger.exception("数据库查询失败", extra={"sql": sql_safe})
成功:
{"code": 0, "message": "success", "data": {...}}
失败(由 ApiException 触发):
{"code": 400, "message": "用户不存在"}
code 区分:401 跳登录、403 提示无权限、其他展示 message共 1 个版本