2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以使用自動(dòng)枚舉值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()
現(xiàn)在:print(ErrorReason.EMAIL_ALREADY_REGISTERED)將只是EMAIL_ALREADY_REGISTERED
正如 Tom Wojcik 的回答中所述,也繼承自str,以使其可序列化json。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
有一些我不需要的不必要的數(shù)值
你需要它們。這實(shí)際上就是您返回的內(nèi)容。我知道您只需要 或 之一是什么意思name,value但最好保持它們相同。auto對(duì)此有幫助。
在傳遞該值時(shí)序列化它:str創(chuàng)建“ErrorReason.EXCEPTION”,但我也可以執(zhí)行ErrorReason.EXCEPTION.name或.value(獲取數(shù)值),并且flask.jsonify默認(rèn)不支持它,所以我需要設(shè)置一個(gè) JSON 序列化器子類
確實(shí),Enum不可序列化。
默認(rèn)情況下這會(huì)失敗
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這就是為什么鼓勵(lì)與(看看父母)一起使用它的原因。
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。
添加回答
舉報(bào)