Python接口异常处理规范_错误码设计解析【技巧】

星涛大大_3041

星涛大大_3041

2025-12-25

893人浏览

原创

错误码需全局唯一、语义明确,统一用常量类管理;异常须分层捕获并映射到对应错误码;返回结构固定为code/msg/data,msg须静态化、国际化友好;自定义异常应继承BaseBusinessError并带code属性。

python接口异常处理规范_错误码设计解析【技巧】

错误码必须全局唯一且语义明确

Python接口返回的错误码不是随便编的数字,400、500这类HTTP状态码不能替代业务错误码。业务错误码要能直接对应到具体问题类型,比如用户未登录是1001,参数缺失是1002,库存不足是2003。避免用0或-1这种泛化值表示所有失败——前端无法据此做差异化处理。

建议用常量类统一管理:

class ErrorCode:
    USER_NOT_LOGIN = 1001
    PARAM_MISSING = 1002
    INSUFFICIENT_STOCK = 2003
    ORDER_NOT_FOUND = 3001

不要把错误码硬编码在return里,也不要分散在多个模块中定义。

异常捕获要分层:HTTP层不吞业务异常

FastAPI/Flask等框架里,常见错误是把所有异常都用try...except Exception:包住,然后统一返回{"code": 500, "msg": "服务器错误"}。这会让调试变困难,也掩盖了本该由客户端处理的业务异常(如重复提交、余额不足)。

正确做法是分三级捕获:

  • 捕获已知业务异常(如InsufficientStockError),映射到对应ErrorCode.INSUFFICIENT_STOCK
  • 捕获ValidationError等框架级异常,转为ErrorCode.PARAM_MISSING
  • 只对真正未预期的Exception兜底,记录日志并返回500 + 通用提示

关键点:raise InsufficientStockError()比return {"code": 2003, ...}更利于测试和链路追踪。

错误信息字段要分离code/msg/data

返回结构必须稳定,不能因为调试需要就临时加debug_info字段,也不能把错误详情全塞进msg里。标准格式应为:

前端开发
前端开发

ys-agent 前端(frontend/)功能迭代的工程规范守门 skill。当任何 agent 接到 ys-agent 前端相关任务时——新增页面、新增组件、加 API、加 Pinia store、改路由、写 mock、调整布局、修改样式、对接后端接口、迁移 demo 代码、做主题、加权限、写公共组件、做数据可视化、做表单、做弹窗、做表格、做搜索过滤、调 Element Plus 用法、做响应式、做性能优化,或仅仅是在 frontend/ 目录下编辑任何 .vue / .ts / .scss / .c

下载
{
  "code": 1002,
  "msg": "缺少必要参数:user_id",
  "data": null
}

msg面向前端用户或调用方,需中文、简洁、无技术术语;data可选,用于携带补救信息(如重试时间、跳转链接);真正的堆栈或上下文必须进日志,不返给客户端。

特别注意:msg不能拼接变量(如f"用户{uid}不存在"),否则无法被前端国际化或埋点统计——应固定文案,靠data传动态值。

自定义异常类必须继承Exception且带code属性

写一个BaseBusinessError作为基类,强制子类提供code和message:

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

class ParamMissingError(BaseBusinessError):
    def __init__(self, field: str):
        super().__init__(ErrorCode.PARAM_MISSING, f"缺少必要参数:{field}")

这样中间件才能统一识别并序列化。别用ValueError或RuntimeError代替——它们没有code属性,后续扩展会卡死。

还有个易忽略点:异常类名要体现领域,比如PaymentTimeoutError比TimeoutError更安全,后者容易和标准库冲突。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
flask框架如何搭建
flask框架如何搭建

搭建步骤:1、安装Python和Pip;2、创建虚拟环境;3、安装Flask;4、创建Flask应用;5、运行应用;6、访问应用。想了解更多flask框架的相关内容,可以阅读本专题下面的文章。

2024.06.27

3975

8

Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

2025.08.25

6104

10

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

2025.12.15

316

16

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

2024.05.11

689

5

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

2025.12.18

644

18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

2026.03.31

438

17

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

119

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

574

18

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

2026.05.09

676

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习