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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:06:40