You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中验证输入是否为整数枚举的成员值?

问题:验证整数枚举的值是否合法

现有如下整数枚举类:

from enum import IntEnum, StrEnum

class SamplingRateEnum(IntEnum):
    SR_22050 = 22_050
    SR_44100 = 44_100
    SR_80000 = 88_000  # NOTE *not* 88_200

当前使用以下方式验证用户输入是否为枚举的合法成员值,但实现不够优雅:

user_input = 22_050 
valid_flag = user_input in SamplingRateEnum.__members__.values()

需要基于值而非键来验证,询问Python标准库中是否有更优的实现方式(避免额外依赖)。


最优实现方案

方案1:利用枚举构造函数的异常捕获(推荐)

IntEnum的构造函数支持传入合法值返回对应的枚举成员,若传入非法值则抛出ValueError,通过try-except块即可实现验证:

user_input = 22_050
valid_flag = False
try:
    SamplingRateEnum(user_input)
    valid_flag = True
except ValueError:
    pass

这种方式符合枚举设计的原生逻辑,代码可读性更高。

方案2:预生成合法值集合(适合多次验证场景)

如果需要频繁验证输入,可以预先生成一个包含所有枚举值的集合,利用集合O(1)的查找效率提升性能:

# 可预定义在枚举类外部或内部
SAMPLING_RATE_VALUES = {member.value for member in SamplingRateEnum}

user_input = 22_050
valid_flag = user_input in SAMPLING_RATE_VALUES

方案3:简化现有遍历方式

如果坚持使用遍历枚举的方式,可以简化代码——枚举类本身是可迭代对象,无需直接访问__members__.values():

user_input = 22_050
valid_flag = user_input in (member.value for member in SamplingRateEnum)

内容的提问来源于stack exchange,提问作者Anil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:29:59