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
相关产品推荐
相关产品推荐

