You need to enable JavaScript to run this app. Python项目报错AttributeError: '_EnumDict' object has no attribute '_cls_name'如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Python项目报错AttributeError: '_EnumDict' object has no attribute '_cls_name'如何解决?

AttributeError: '_EnumDict' object has no attribute '_cls_name' 排查解决指南

该报错本质是Python枚举模块enum的版本兼容问题,或是枚举类定义/第三方依赖的枚举实现不符合当前Python版本的规范要求,多出现于Python 3.11及以上版本环境。

1. 排查Python版本兼容性

  • Python 3.11对enum的内部实现做了不兼容升级,新增了_cls_name属性校验逻辑,旧代码(包括Python 3.10及以下版本编写的自定义枚举、第三方依赖的枚举实现)未适配该逻辑就会触发报错
  • 验证方式:执行命令python --version确认当前环境Python版本,如果版本≥3.11,可优先尝试降级到Python 3.10.x验证报错是否消失

2. 排查自定义枚举类的写法错误

  • 检查是否存在手动操作_EnumDict对象、自定义枚举元类、动态生成枚举类时未按照官方规范传入类名的情况
  • 禁止直接修改枚举类的内部命名空间,所有枚举值定义需要符合Enum类的编写规范

3. 排查Shuup及相关依赖版本

  • 旧版Shuup(低于2.11.0的部分稳定版)依赖的django-enumfields包及自身的枚举定义未适配Python 3.11+,触发该报错的概率极高
  • 对应解决方案:要么降级Python到3.10.x,要么升级Shuup到最新的兼容高版本Python的正式版,同时升级所有关联的枚举类依赖

4. 排查依赖冲突

  • 执行命令pip list | grep enum查看当前环境安装的枚举相关依赖,常见的如enum34、django-enumfields、enum-tools等都可能存在版本冲突问题
  • 卸载冗余的枚举依赖,将剩余依赖升级到对应适配当前Python版本的版本

快速验证环境是否正常

执行下方最小测试脚本,确认基础枚举功能是否正常:

from enum import Enum

class TestEnum(Enum):
    OPTION1 = 1
    OPTION2 = 2

print(TestEnum.OPTION1)

如果运行该脚本仍然报错,说明当前Python环境的标准库enum模块被篡改,直接重装对应版本的Python即可解决。

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:36:04