业务错误应抛自定义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: 捕获,应显式处理ValueError 或 RuntimeError 替代,它们属于系统层语义code 字段必须是字符串常量,不能拼接或动态生成数据库超时、网络断连、JSON 解析失败——这些是系统级故障,不可预测且需降级或重试。它们必须和业务错误隔离,否则会导致错误码混乱、监控失真、重试逻辑误触发。
常见系统异常类型及建议处理方式:
requests.exceptions.Timeout:标记为临时性失败,可重试,返回 HTTP 503psycopg2.OperationalError:连接池耗尽或 DB 挂了,需熔断,返回 HTTP 500json.JSONDecodeError:上游数据格式错误,属外部依赖问题,记录日志并返回 400(若确认非客户端输入)ValidationError(来自 Pydantic):属于输入校验失败,归为客户端错误(HTTP 422),不视为系统异常直接在路由函数里 raise 异常,靠异常处理器转成标准 JSON 响应,比每个接口手动 return JSONResponse 更可靠。
关键点:
HTTPException 处理客户端错误(4xx),它自带 status_code 和 detail
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)404 作为「用户不存在」的业务标识,导致前端无法区分是资源未找到还是路径写错)ORDER_NOT_FOUND_123456),导致监控无法聚合、日志检索失效真正稳定的错误码只有三类:固定字符串(ORDER_EXPIRED)、带固定前缀的枚举(pay.timeout)、或由中心化配置服务下发的整数 ID(需配套管理后台)。
# python
# js
# 前端
# json
# 处理器
# app
# 后端
# ai
# 路由
# 状态码
# python接口
# 字符串常量
# red
相关文章:
公众号网站制作网页,微信公众号怎么制作?
建站之星×万网:智能建站系统+自助建站平台一键生成
高性能网站服务器配置指南:安全稳定与高效建站核心方案
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
建站主机选购指南:核心配置优化与品牌推荐方案
如何用虚拟主机快速搭建网站?详细步骤解析
如何选择网络建站服务器?高效建站必看指南
如何撰写建站申请书?关键要点有哪些?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
C#如何使用XPathNavigator高效查询XML
如何在自有机房高效搭建专业网站?
如何快速上传建站程序避免常见错误?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
c++ stringstream用法详解_c++字符串与数字转换利器
建站主机选哪种环境更利于SEO优化?
建站10G流量真的够用吗?如何应对访问高峰?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
广州商城建站系统开发成本与周期如何控制?
如何高效生成建站之星成品网站源码?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
小建面朝正北,A点实际方位是否存在偏差?
Python多线程使用规范_线程安全解析【教程】
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
网站制作公司排行榜,四大门户网站排名?
常州企业网站制作公司,全国继续教育网怎么登录?
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何选择适配移动端的WAP自助建站平台?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
专业网站建设制作报价,网页设计制作要考什么证?
如何在服务器上三步完成建站并提升流量?
建站之星如何助力网站排名飙升?揭秘高效技巧
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
无锡营销型网站制作公司,无锡网选车牌流程?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
大连 网站制作,大连天途有线官网?
建站之星展会模板:智能建站与自助搭建高效解决方案
,柠檬视频怎样兑换vip?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
建站之星2.7模板快速切换与批量管理功能操作指南
如何配置支付宝与微信支付功能?
如何选择高效便捷的WAP商城建站系统?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何确认建站备案号应放置的具体位置?
建站之星导航配置指南:自助建站与SEO优化全解析
自助网站制作软件,个人如何自助建网站?
如何快速搭建虚拟主机网站?新手必看指南
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
*请认真填写需求信息,我们会在24小时内与您取得联系。