AttributeError: '模块'对象没有属性'newperson
我现在正在学习Python编程(而且还是个初学者)。目前我在文件练习上遇到了困难(这些是我需要完成的特定任务,而不是随便做我想做的事情。不幸的是,这也意味着我可能无法使用任何复杂的(对我来说)快捷方式)。
我现在使用的是Python 3.2.2。
我需要两个不同的程序。第一个是输入用户输入的内容(一个名字和一个出生日期),然后把这些信息放到一个列表中,并写入一个二进制文件。第二个是读取这个文件,并把内容打印成一个表格,使用填充格式。
代码:
第一个
import pickle
class newperson():
def __init__(self):
self.name = ""
self.dob = ""
stop = False
people = []
print("When you want to stop just hit enter")
count = 0
while stop == False:
name = input("Please Enter the name: ")
if len(name) == 0:
stop = True
else:
people.append(newperson())
people[count].name = name
people[count].dob = input("Please enter their DOB: ")
count = count + 1
file = open("ex9.4.dat", "wb")
pickle.dump(people,file)
file.close()
第二个:
import pickle
myfile = open("ex9.4.dat", "rb")
people = pickle.load(myfile)
print("{0:<15}{1}".format("Name","DOB"))
for item in people:
print("{0:<15}{1}".format(item.name,item.dob))
问题是,当我尝试运行第二个程序时,出现了以下错误:
AttributeError: 'module' object has no attribute 'newperson'
在
people = pickle.load(myfile)
不幸的是,当我去其他问题寻找答案时,要么没有解决方案有效,要么不适合我,或者大多数都让我完全听不懂。
我到底哪里做错了?
提前感谢你的帮助。
2 个回答
0
我觉得要进行反序列化(也就是用pickle.load),你必须在你的代码环境中有一个叫做newperson的类。试着在你运行pickle.load的模块里导入这个newperson类。
5
当pickle加载文件时,它会尝试创建newperson
的实例,但在第二个程序中并没有定义newperson
。为了解决这个问题,你可以新建一个文件newperson.py
,里面只包含newperson
类的定义。
# newperson.py
class newperson():
def __init__(self):
self.name = ""
self.dob = ""
在两个程序中,在导入其他模块或使用pickle之后导入这个类。
from newperson import newperson
另外,你也可以用字典来代替newperson
类。