dict中的python 33 pickle类实例

dict中的python 33 pickle类实例,python,python-3.x,pickle,cpython,Python,Python 3.x,Pickle,Cpython,下面的代码 import pickle class Member: global members try: with open('member dict.txt','rb') as f: members=pickle.load(f) except: members={} def __init__(self,name,info,new=True): if name in members and

下面的代码

import pickle
class Member:
    global members
    try:
        with open('member dict.txt','rb') as f:
            members=pickle.load(f)
    except:
        members={}

    def __init__(self,name,info,new=True):
        if name in members and new:
            print('name is taken')
            self.name='Void'
            self.info={'Void':'Void'}
        else:
            self.info=info
            self.name=name
            members[name]=self
            if new:
                with open('member dict.txt','wb') as f:
                    pickle.dump(members,f)
    def __getstate__(self):
        return[self.name,self.info]
    def __setstate__(self,d):
        return Member(d[0],d[1],False)
然后在idle(在第一个代码中输入f5后)输入

PJ=member('p',{})

我关闭idle,然后重新打开它并键入

members

它返回
{}

我自己运行了你的代码,第二次运行你的程序时,错误是
AttributeError:'module'对象没有属性'Member'
。您正在尝试在正确构造类之前解除类的绑定。要扩展第一条注释,将
成员
放入类定义是导致代码失败的原因。将它移到类定义下面,它就会工作

class Member:
    def __init__(self, name, info, new=True):
        ...
    ...

try:
    with open('member dict.txt', 'rb') as f:
        members = pickle.load(f)
except Exception as e:
    members = {}

为什么要将
成员
放入类定义中?我将其作为查看所有Instance的一种方式,我想创建一个digital club HighArchy您的try区块中有什么例外?使用
除异常外的e:
并打印出e。@forivall没有。别傻了,总是有异常的。照我说的去做(把它存储在一个变量中并打印出来),这样我就能帮上忙了。非常感谢你。我从来没有想到过。我会尽快投赞成票。