如何在Python中通过字符串获取枚举类及对应枚举值?
将字符串转换为对应枚举实例的方法
你可以通过以下两步实现将字符串"FooEnum"和"bar"转换为FooEnum.bar:
1. 根据字符串获取枚举类
由于枚举类定义在当前代码的全局命名空间中,可以通过globals()(全局命名空间字典)获取对应的类对象。需要额外做类型校验,确保拿到的是有效的IntEnum子类。
2. 根据字符串获取枚举成员
拿到枚举类后,使用下标语法enum_cls[member_name]即可通过成员名字符串获取对应的枚举实例(相比属性访问enum_cls.bar,下标更适合处理字符串变量的场景)。
完整代码示例
from enum import IntEnum, auto class FooEnum(IntEnum): foo = auto() bar = auto() baz = auto() # 来自HTML选择框的字符串值 enum_name_str = "FooEnum" member_name_str = "bar" # 步骤1:获取枚举类 enum_cls = globals().get(enum_name_str) # 校验是否为有效的IntEnum子类 if not (isinstance(enum_cls, type) and issubclass(enum_cls, IntEnum)): raise ValueError(f"找不到有效的枚举类: {enum_name_str}") # 步骤2:获取枚举成员 try: target_enum = enum_cls[member_name_str] except KeyError: raise ValueError(f"枚举类 {enum_name_str} 中不存在名为 {member_name_str} 的成员") print(target_enum) # 输出:FooEnum.bar
注意事项
- 如果枚举类不在当前全局命名空间(比如定义在其他模块),可以通过动态导入模块后获取类,示例:
import importlib module = importlib.import_module("your_module_name") enum_cls = getattr(module, enum_name_str) - 必须添加异常处理和类型校验,避免HTML传入无效字符串导致程序崩溃。
内容的提问来源于stack exchange,提问作者TheSoundDefense
相关产品推荐
相关产品推荐

