Python中运行时根据枚举成员名获取枚举值的方法
解决通过变量名获取Python Enum成员的问题
你碰到的这个问题很典型——当你用.访问枚举类的属性时,Python会把后面的名字当作字面量属性名来查找,而不是变量里存的字符串值。所以EnumList.enumMemberName其实是在找名为enumMemberName的枚举成员,但你的EnumList里只有foo和bar,自然会抛出AttributeError。
下面给你两种实用的解决方案:
方法1:使用枚举类的索引([])访问
枚举类本身支持通过中括号传入成员名字符串来获取对应的枚举对象,这是最直接的方式:
from enum import Enum class EnumList(Enum): foo = 1 bar = 2 enumMemberName = input("Enter enum member name: ") try: # 通过字符串索引获取枚举成员 enum_member = EnumList[enumMemberName] enumValue = repr(enum_member) print(enumValue) # 比如输入foo会输出 <EnumList.foo: 1> except KeyError: # 处理输入不存在的成员名的情况 print(f"错误:'{enumMemberName}' 不是EnumList的有效成员")
这种方法的好处是简洁,但如果输入的名字不存在会抛出KeyError,所以建议用try-except捕获异常,提升程序的健壮性。
方法2:利用__members__字典安全获取
每个枚举类都有一个__members__属性,它是一个包含所有枚举成员的有序字典(键是成员名字符串,值是对应的枚举对象)。用get方法可以安全获取,不存在时返回None,避免报错:
from enum import Enum class EnumList(Enum): foo = 1 bar = 2 enumMemberName = input("Enter enum member name: ") # 从__members__字典中获取成员,不存在则返回None enum_member = EnumList.__members__.get(enumMemberName) if enum_member: enumValue = repr(enum_member) print(enumValue) else: print(f"提示:'{enumMemberName}' 不在EnumList的成员列表中")
这种方式不需要捕获异常,直接通过判断enum_member是否存在来处理分支,代码逻辑更清晰。
总结一下:不要用.来访问变量存储的枚举成员名,而是用索引或者__members__字典来根据字符串动态获取枚举对象~
内容的提问来源于stack exchange,提问作者tripti sinha




