0

我有下一个枚举:

class EStatus(enum.IntEnum):
    NEW = 0
    MODIFIED = 1

和架构:

ARGS = {
    'status': EnumField(EStatus, by_value=True, required=False)
}

在 Flask 之后,我声明了 GET 方法webargs

@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将其转换为?intEStatus(value)

4

1 回答 1

1
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 静态方法将 str 转换为 Enum 类型。

于 2020-10-02T05:24:42.757 回答