我有下一个枚举:
class EStatus(enum.IntEnum):
NEW = 0
MODIFIED = 1和模式:
ARGS = {
'status': EnumField(EStatus, by_value=True, required=False)
}在Flask中之后,我用webargs声明了GET-method
@use_args(ARGS, location='query')
def get(self, args: Dict[str, any]):
return []它会失败,并返回错误:
{'messages': {'query': {'status': ['Invalid enum value 1']}}, 'schema': <GeneratedSchema(many=False)>, 'headers': None}我在调试器中检查了一下,发现EnumField调用了EStatus(value)。问题是我的值是str类型,因为它来自查询参数。
如何使EnumField在调用EStatus(value)前将其强制转换为int
发布于 2020-10-02 13:24:43
class EStatus(enum.IntEnum):
NEW = 0
MODIFIED = 1
@staticmethod
def from_str(e_status: str):
e_status = e_status.upper()
if e_status in EStatus.__members__:
return EStatus[e_status]
else:
raise ValueError(f'{e_status} is not a valid EStatus.')
#You can use above from_str like below,
EStatus e_status = EStatus.from_str('NEW')
print(e_status.name)
print(e_status.value)希望对于您的问题,您应该能够使用from_str静态方法将字符串转换为枚举类型。
https://stackoverflow.com/questions/64163633
复制相似问题