_pickle.PicklingError:无法腌制<class '__main___.{CONST} '>:属性查找失败dir_namesmain_on __main__失败

问题描述 投票:0回答:1

首先

dir_names
在腌制时效果很好

dir_names = collections.namedtuple('dir_names', ['mark', 'category'])
pickle.dump(dir_names, open('tmp.bin', 'wb'))

我想将

dir_name
设为常量

DIR_NAMES = collections.namedtuple('dir_names', ['mark', 'category'])
pickle.dump(DIR_NAMES, open('tmp.bin', 'wb'))

但是在腌制它时,我收到了这个错误

Traceback (most recent call last):
  File "/Users/zyq/CC_Cat/warc_process.py", line 376, in <module>
    pickle.dump(DIR_NAMES, open('tmp.bin', 'wb'))
_pickle.PicklingError: Can't pickle <class '__main__.dir_names'>: attribute lookup dir_names on __main__ failed

我想知道为什么它在成为常量时会变坏,以及为什么

DIR_NAMES
__main__.dir_names

被降低了

我尝试了

defaultdict
效果很好

DD = collections.defaultdict(int)
pickle.dump(DD, open('tmp.bin', 'wb'))
python python-3.x pickle namedtuple
1个回答
0
投票

看来

pickle
需要在
namedtuple("DIR_NAMES", ...)
中与变量
DIR_NAMES = ...

中使用相同的名称
DIR_NAMES = collections.namedtuple('DIR_NAMES', ['mark', 'category'])
pickle.dump(DIR_NAMES, open('tmp.bin', 'wb'))

您也可以在答案中看到这个问题:

© www.soinside.com 2019 - 2024. All rights reserved.