Python之错误码设计
在 web 项目中,我们经常使用自定义状态码来告知请求方请求结果以及请求状态;在 Python 中该如何设计自定义的状态码信息呢?
1)普通类+字典设计状态码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Desc: { 项目响应码模块 } class RETCODE:
OK = "0"
ERROR = "-1"
IMAGECODEERR = "4001"
THROTTLINGERR = "4002"
NECESSARYPARAMERR = "4003" err_msg = {
RETCODE.OK : "成功",
RETCODE.IMAGECODEERR : "图形验证码错误",
RETCODE.THROTTLINGERR : "访问过于频繁",
RETCODE.NECESSARYPARAMERR : "缺少必传参数",
}
单独利用一个字典进行状态码信息对照,这样设计一旦状态码多了就不好对照,再使用过程中也没那么方便,简单试下组织一个成功的信息
data = {
'code': RETCODE.OK,
'errmsg': err_msg[RETCODE.OK]
}
2)巧用枚举类设计状态码信息
枚举类定义:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Desc: { 项目枚举类模块 } from enum import Enum class StatusCodeEnum(Enum):
"""状态码枚举类""" OK = (0, '成功')
ERROR = (-1, '错误')
SERVER_ERR = (500, '服务器异常')
普通的类继承 enum 模块中的 Enum 类就变成了枚举类。
在ipython中使用:
In [21]: ok = StatusCodeEnum.OK In [22]: type(ok)
Out[22]: <enum 'StatusCodeEnum'> In [23]: error = StatusCodeEnum.ERROR In [24]: type(error)
Out[24]: <enum 'StatusCodeEnum'> In [26]: ok.name
Out[26]: 'OK' In [27]: ok.value
Out[27]: (0, '成功') In [28]: error.name
Out[28]: 'ERROR' In [29]: error.value
Out[29]: (-1, '错误')
枚举类中的每一个属性都返回一个枚举对象,其中枚举对象有两个重要的属性 name, value
- name 枚举对象在枚举类中的属性名
- value 则是枚举对象在枚举类中对应属性名的值
用枚举类组组织一个成功的响应信息
code = StatusCodeEnum.OK.value[0]
errmsg = StatusCodeEnum.OK.value[1]
data = {
'code': code,
'errmsg': errmsg
}
封装枚举类:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Desc: { 项目枚举类模块 } from enum import Enum class StatusCodeEnum(Enum):
"""状态码枚举类""" OK = (0, '成功')
ERROR = (-1, '错误')
SERVER_ERR = (500, '服务器异常') @property
def code(self):
"""获取状态码"""
return self.value[0] @property
def errmsg(self):
"""获取状态码信息"""
return self.value[1]
通过 @property 装饰器把类型的方法当属性使用,由于 枚举类.属性名 对应着不同的枚举对象就很好的把状态码和信息进行了封装。看看外部调用的结果
响应:
data = {
'code': StatusCodeEnum.OK.code,
'errmsg': StatusCodeEnum.OK.errmsg
}
最终demo:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Desc: { 项目枚举类模块 } from enum import Enum class StatusCodeEnum(Enum):
"""状态码枚举类""" OK = (0, '成功')
ERROR = (-1, '错误')
SERVER_ERR = (500, '服务器异常') IMAGE_CODE_ERR = (4001, '图形验证码错误')
THROTTLING_ERR = (4002, '访问过于频繁')
NECESSARY_PARAM_ERR = (4003, '缺少必传参数')
USER_ERR = (4004, '用户名错误')
PWD_ERR = (4005, '密码错误')
CPWD_ERR = (4006, '密码不一致')
MOBILE_ERR = (4007, '手机号错误')
SMS_CODE_ERR = (4008, '短信验证码有误')
ALLOW_ERR = (4009, '未勾选协议')
SESSION_ERR = (4010, '用户未登录') DB_ERR = (5000, '数据错误')
EMAIL_ERR = (5001, '邮箱错误')
TEL_ERR = (5002, '固定电话错误')
NODATA_ERR = (5003, '无数据')
NEW_PWD_ERR = (5004, '新密码错误')
OPENID_ERR = (5005, '无效的openid')
PARAM_ERR = (5006, '参数错误')
STOCK_ERR = (5007, '库存不足') @property
def code(self):
"""获取状态码"""
return self.value[0] @property
def errmsg(self):
"""获取状态码信息"""
return self.value[1]
Python之错误码设计的更多相关文章
- API错误码设计-资料
搜索到一篇文章:新浪微博API错误代码说明对照表 可以参考新浪微博的错误码设计思路,设计自己系统的错误码.
- AgileBoot - 项目内统一的错误码设计
本篇文章主要探讨关于统一错误码的设计,并提供笔者的实现 欢迎大家讨论,指正. 该错误码的设计在仓库: github:https://github.com/valarchie/AgileBoot-Bac ...
- [2017-08-28]Abp系列——业务异常与错误码设计及提示语的本地化
本系列目录:Abp介绍和经验分享-目录 前言 ABP中有个异常UserFriendlyException经常被使用,但是它所在的命名空间是Abp.UI,总觉得和展现层联系过于紧密,在AppServic ...
- Java服务器端 API 错误码设计总结
1.对于API结果返回,定义BaseResult 类 拥有success,errorCode,errorMsg个3个基本参数,success使用Boolean类型,errorCode使用Integer ...
- python windows错误码
在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问 在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问.那么是删除权限不够?用管理员 ...
- CMPP错误码说明
与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zzzzSMSC返回状态报告的状态值为DELETEDMK:zzzzSMSC返回状态报告的状态值为UNDEL ...
- Spring Boot HTTP over JSON 的错误码异常处理
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “年轻人不要怕表现,要敢于出来表现,但还是那句话,要有正确的度,你的表现是分析问题和解决问题的能 ...
- Go 实现 自动检索 API 错误码代码行 并 打印成文档,例 markDown 形式等
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- 【SMTP】常见错误码
'* 邮件服务返回代码含义 '* 500 格式错误,命令不可识别(此错误也包括命令行过长) '* 501 参数格式错误 '* 502 命令不可实现 '* 503 错误的命令序列 '* 504 命令参数 ...
- UTF-8,Unicode,GBK,希腊字母读法,ASCII码表,HTTP错误码,URL编码表,HTML特殊字符,汉字编码简明对照表
UNICODE,GBK,UTF-8区别 UNICODE,GBK,UTF-8区别 简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那 ...
随机推荐
- shell脚本字符串截取方法整理
首先先声明一个变量str,下面演示以该变量为例: str='https://www.baidu.com/about.html' 1.#号截取,删除左边字符,保留右边字符 echo ${str#*//} ...
- Angular 18+ 高级教程 – Reactive Forms
前言 上一篇的 Ajax 和这一篇的表单 (Form) 都是前端最最最常见的需求. 为此,Angular 分别提供了两个小型库来帮助开发者实现这些需求: Ajax – HttpClient Form ...
- Figma 学习笔记 – Plugin
安装 Figma 安装 plugin 基本上就是点击一下开启而已. 到社区搜索 -> 点击 install Material Icon 下载地址 它的交互不是 drag 出来哦, 而是点击 ic ...
- sicp每日一题[2.13-2.16]
Exercise 2.13 Show that under the assumption of small percentage tolerances there is a simple formul ...
- shell脚本参数读取列表文件,循环执行时,要注意这个列表文件转换成 unix 格式
当报一些很奇怪的错,比如报错多了一个空格,但 vim 看打开没有,比如: 或者肉眼看上去路径正常,但却报路径不存在: 这种时候要使用 dos2unix 工具,把这个列表文件转换一下:
- WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧
liwen01 2024.09.22 前言 前面介绍了 WiFi 的工作原理和 WiFi 的接入过程,这里将通过分析 WiFi 具体数据包结构,让你对 WiFi 工作原理和接入过程有一个更进一步的了解 ...
- ptmalloc、tcmalloc与jemalloc对比分析
背景介绍 在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低.但在晚上高峰时期,在CPU刚刚超过50 ...
- 2021年8月国产数据库排行榜:TiDB稳榜首,达梦返前三,Kingbase进十强,各厂商加速布局云生态
8月份的国产数据库流行度排行榜新鲜出炉.本月共有139个数据库参与了排名. 先来看看排行榜前五名.PingCAP的TiDB分数连续第二个月上涨,总分达到630.21,以136.48的分数差拉开了与第二 ...
- 泛型dotnet
// 什么是泛型List<T> T:表示类型参数,指代任意类型 T可以是任意标识 // 编写代码时使用特殊符号替代位置类型,在实例化或使用/调用时才会进行具体类型的定义 // 特点:重用代 ...
- vant2 自动检查表单验证 -validate
ref 给 <van-form @submit="onSubmit" ref="form"> 标签 : // 检验手机号是否合格 await thi ...