全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python接口异常分类设计_业务与系统错误区分【技巧】

业务错误应抛自定义BizError异常而非通用Exception,系统异常需分级捕获并隔离处理,错误码须为固定字符串、带前缀枚举或中心化整数ID,严禁动态生成或混用HTTP状态码。

业务错误该不该抛异常

业务错误不是程序崩溃,而是用户操作不合法或业务规则不满足,比如「余额不足」「订单已取消」。这类问题不该用 Exception 无差别兜底,否则上层无法区分是代码 bug 还是业务拒绝。

推荐做法是定义显式业务错误类,继承自 Exception 但语义独立:

class BizError(Exception):
    def __init__(self, code: str, message: str):
        self.code = code
        self.message = message
        super().__init__(message)

使用示例

if order.status == "cancelled": raise BizError("ORDER_CANCELLED", "该订单已被取消")

  • BizError 不该被通用 except Exception: 捕获,应显式处理
  • 避免用 ValueErrorRuntimeError 替代,它们属于系统层语义
  • 前端需要稳定错误码时,code 字段必须是字符串常量,不能拼接或动态生成

系统异常必须分级捕获

数据库超时、网络断连、JSON 解析失败——这些是系统级故障,不可预测且需降级或重试。它们必须和业务错误隔离,否则会导致错误码混乱、监控失真、重试逻辑误触发。

常见系统异常类型及建议处理方式:

  • requests.exceptions.Timeout:标记为临时性失败,可重试,返回 HTTP 503
  • psycopg2.OperationalError:连接池耗尽或 DB 挂了,需熔断,返回 HTTP 500
  • json.JSONDecodeError:上游数据格式错误,属外部依赖问题,记录日志并返回 400(若确认非客户端输入)
  • ValidationError(来自 Pydantic):属于输入校验失败,归为客户端错误(HTTP 422),不视为系统异常

FastAPI 中统一错误响应结构

直接在路由函数里 raise 异常,靠异常处理器转成标准 JSON 响应,比每个接口手动 return JSONResponse 更可靠。

关键点:

  • HTTPException 处理客户端错误(4xx),它自带 status_codedetail
  • 自定义 BizError 需注册独立 handler,避免被 Exception 兜底覆盖
  • 所有系统异常默认走全局 Exception handler,但必须记录完整 traceback 到日志,不能只打 str(e)
@app.exception_handler(BizError)
async def biz_error_handler(request: Request, exc: BizError):
    return JSONResponse(
        status_code=400,
        content={"code": exc.code, "message": exc.message}
    )

@app.exception_handler(Exception) async def unhandled_exception_handler(request: Request, exc: Exception): logger.error("Unhandled exception", exc_info=exc) return JSONResponse( status_code=500, content={"code": "INTERNAL_ERROR", "message": "服务暂时不可用"} )

错误码设计别碰这三条红线

错误码不是随便编的字符串,它是前后端联调、监控告警、客服排查的唯一线索。以下三点踩中任一,后续维护成本会指数上升:

  • 同一个业务场景在不同接口返回不同错误码(如「库存不足」在下单接口是 STOCK_SHORT,在支付接口变成 INSUFFICIENT_STOCK
  • 把 HTTP 状态码直接当业务码用(如返回 404 作为「用户不存在」的业务标识,导致前端无法区分是资源未找到还是路径写错)
  • 错误码含变量或上下文信息(如 ORDER_NOT_FOUND_123456),导致监控无法聚合、日志检索失效

真正稳定的错误码只有三类:固定字符串(ORDER_EXPIRED)、带固定前缀的枚举(pay.timeout)、或由中心化配置服务下发的整数 ID(需配套管理后台)。


# python  # js  # 前端  # json  # 处理器  # app  # 后端  # ai  # 路由  # 状态码  # python接口  # 字符串常量  # red 


相关文章: Android滚轮选择时间控件使用详解  广东企业建站网站优化与SEO营销核心策略指南  建站之星在线客服如何快速接入解答?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  三星网站视频制作教程下载,三星w23网页如何全屏?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  香港服务器如何优化才能显著提升网站加载速度?  nginx修改上传文件大小限制的方法  济南专业网站制作公司,济南信息工程学校怎么样?  制作旅游网站html,怎样注册旅游网站?  建站之星如何取消后台验证码生成?  建站之星北京办公室:智能建站系统与小程序生成方案解析  长沙做网站要多少钱,长沙国安网络怎么样?  c# 在高并发场景下,委托和接口调用的性能对比  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  建站主机如何选?高性价比方案全解析  宝塔新建站点报错如何解决?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  建站主机空间推荐 高性价比配置与快速部署方案解析  大连 网站制作,大连天途有线官网?  安徽网站建设与外贸建站服务专业定制方案  高防服务器租用指南:配置选择与快速部署攻略  如何用AWS免费套餐快速搭建高效网站?  视频网站制作教程,怎么样制作优酷网的小视频?  如何通过商城免费建站系统源码自定义网站主题?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  建站主机与虚拟主机有何区别?如何选择最优方案?  如何构建满足综合性能需求的优质建站方案?  香港服务器租用每月最低只需15元?  代购小票制作网站有哪些,购物小票的简要说明?  如何在IIS中新建站点并配置端口与物理路径?  如何续费美橙建站之星域名及服务?  如何在云主机上快速搭建网站?  如何快速建站并高效导出源代码?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  在线制作视频的网站有哪些,电脑如何制作视频短片?  简单实现Android验证码  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  宁波免费建站如何选择可靠模板与平台?  海南网站制作公司有哪些,海口网是哪家的?  专业商城网站制作公司有哪些,pi商城官网是哪个?  网站制作公司排行榜,四大门户网站排名?  建站VPS推荐:2025年高性能服务器配置指南  设计网站制作公司有哪些,制作网页教程?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何做静态网页,sublimetext3.0制作静态网页?  建站之星免费模板:自助建站系统与智能响应式一键生成  重庆网站制作公司哪家好,重庆中考招生办官方网站?  如何用PHP快速搭建CMS系统? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。