如何在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
相关产品推荐
相关产品推荐

