Python 3.x 枚举不能在Python3.6中进行pickle,但可以在Python3.7中进行pickle

Python 3.x 枚举不能在Python3.6中进行pickle,但可以在Python3.7中进行pickle,python-3.x,enums,Python 3.x,Enums,今天,我遇到了一个问题,在Python3.6中无法对枚举进行pickle,但在Python3.7中没有发生错误。以下代码演示了该问题: 导入枚举 进口泡菜 类GoodEnum(enum.enum): CAT='C' 狗='D' 定义(自我): 返回str(self.value) #可以腌制得很好 打印(pickle.dumps(GoodEnum.CAT)) 类字符串值: 定义(自我): 返回str(self.value) 类ErrorEnum(StringValue,enum.enum): CA

今天,我遇到了一个问题,在Python3.6中无法对枚举进行pickle,但在Python3.7中没有发生错误。以下代码演示了该问题:

导入枚举
进口泡菜
类GoodEnum(enum.enum):
CAT='C'
狗='D'
定义(自我):
返回str(self.value)
#可以腌制得很好
打印(pickle.dumps(GoodEnum.CAT))
类字符串值:
定义(自我):
返回str(self.value)
类ErrorEnum(StringValue,enum.enum):
CAT='C'
狗='D'
#原因TypeError:无法在Python 3.6中pickle
打印(pickle.dumps(ErrorEnum.CAT))
在Python3.6中:

$python--版本
Python 3.6.9
$python picklerror.py
b'\x80\x03c\uuuuuu main\uuuuuuu\nq\x00X\x01\x00\x00\x00Cq\x01\x85q\x02Rq\x03'
回溯(最近一次呼叫最后一次):
文件“pickleerror.py”,第28行,在
打印(pickle.dumps(ErrorEnum.CAT))
文件“/usr/local/lib/python3.6/enum.py”,第46行,在调用时中断
raise TypeError(“%r”不能被pickle“%self”)
TypeError:无法进行酸洗
在Python3.7中时:

$python--版本
Python 3.7.5
$python picklerror.py
b'\x80\x03c\uuuuuu main\uuuuuuu\nq\x00X\x01\x00\x00\x00Cq\x01\x85q\x02Rq\x03'
b'\x80\x03c\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我在Python发行说明中找不到关于这个特定问题的任何内容。所以这里基本上有两个问题:

  • 为什么这段代码会导致Python 3.6中出现此错误
  • 为什么它不会在Python 3.7中导致相同的错误