Python Enum值存在性判断失败问题,求原因解析
问题分析:Enum代码输出"BAD"和"Value does not exist"的原因
核心问题:Enum成员定义后的逗号导致值变为元组
你代码里的USER_LOGIN = 1,和USER_LOGOUT = 2,末尾多了逗号,这会让Python把赋值内容解析成单元素元组,而非整数。也就是说:
EventType.USER_LOGIN.value实际是(1,),不是1EventType.USER_LOGOUT.value实际是(2,),不是2
为什么输出"BAD"?
_value2member_map_是Enum内部维护的「值到成员实例」映射表,里面的键是(1,)和(2,)。你传入的eventType = 2是整数,显然不在这个映射表的键集合里,所以has_value(2)返回False,触发print("BAD")。
为什么输出"Value does not exist"?
EventType.__members__.values()返回的是Enum的成员实例对象(比如EventType.USER_LOGIN、EventType.USER_LOGOUT),而你用来判断的eventType是整数2,和这些实例类型完全不同,自然不在这个集合里,所以输出"Value does not exist"。
修复方案
去掉Enum成员赋值末尾的逗号即可:
from enum import Enum class EventType(Enum): USER_LOGIN = 1 # 去掉末尾逗号 USER_LOGOUT = 2 # 去掉末尾逗号 @classmethod def has_value(cls, value): return value in cls._value2member_map_ eventType = 2 if not EventType.has_value(eventType): print("BAD") else: print("GOOD") # 现在会输出这个 # 若要判断值是否存在,用has_value最直接 # 若要判断实例,可改用EventType(eventType)捕获异常,或检查值是否在成员的value集合中 if eventType in (member.value for member in EventType.__members__.values()): print("Value exists") # 现在会输出这个 else: print("Value does not exist")
内容的提问来源于stack exchange,提问作者JustANoob
相关产品推荐
相关产品推荐

