2 回答
TA贡献1818条经验 获得超8个赞
您可以使用自动枚举值auto()
并更改和的行为__str__
:
from enum import Enum, auto
class ErrorReason(str, Enum):
def _generate_next_value_(name, start, count, last_values):
return name
def __str__(self):
return self.name
EXCEPTION = auto()
EMAIL_ALREADY_REGISTERED = auto()
PASSWORD_TOO_SHORT = auto()
现在:print(ErrorReason.EMAIL_ALREADY_REGISTERED)将只是EMAIL_ALREADY_REGISTERED
正如 Tom Wojcik 的回答中所述,也继承自str,以使其可序列化json。
TA贡献1829条经验 获得超4个赞
有一些我不需要的不必要的数值
你需要它们。这实际上就是您返回的内容。我知道您只需要 或 之一是什么意思name,value但最好保持它们相同。auto对此有帮助。
在传递该值时序列化它:str创建“ErrorReason.EXCEPTION”,但我也可以执行ErrorReason.EXCEPTION.name或.value(获取数值),并且flask.jsonify默认不支持它,所以我需要设置一个 JSON 序列化器子类
确实,Enum不可序列化。
默认情况下这会失败
from enum import Enum
import json
class ErrorReason(Enum):
EXCEPTION = "EXCEPTION"
EMAIL_ALREADY_REGISTERED = "EMAIL_ALREADY_REGISTERED"
PASSWORD_TOO_SHORT = "PASSWORD_TOO_SHORT"
print(json.dumps({"exc": ErrorReason.EXCEPTION}))
和
TypeError: Object of type ErrorReason is not JSON serializable
str这就是为什么鼓励与(看看父母)一起使用它的原因。
from enum import Enum
import json
class ErrorReason(str, Enum):
EXCEPTION = "EXCEPTION"
EMAIL_ALREADY_REGISTERED = "EMAIL_ALREADY_REGISTERED"
PASSWORD_TOO_SHORT = "PASSWORD_TOO_SHORT"
print(json.dumps({"exc": ErrorReason.EXCEPTION}))
使用 mixin 可以很好地序列化str。
添加回答
举报