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。
添加回答
舉報