2012-02-03 132 views
3

我目前正在学习python编程(并且是一个初学者)。目前我被困在文件练习中(所以这些都是我需要做的事情,而不是做我想做的任何事情。不幸的是,这也意味着我可能不能做任何复杂的(对我来说)快捷方式)AttributeError:'模块'对象没有属性'newperson'

当前使用Python 3.2.2

我需要两个不同的程序。一种是输入用户输入的内容(名称和DOB)并将其放入列表中的记录中并将其写入二进制文件中。另一种是读取该文件并使用填充将其打印到表格中。

代码:

首先

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' 

on

people = pickle.load(myfile) 

不幸的是,当我一直在寻求对其他问题的回答,要么没有任何解决方案都工作过,并不适用于我或大多只是去WAAAY在我头上。

我在做什么错?

在此先感谢您的帮助。

回答

5

当腌菜加载文件时,它会尝试创建newperson实例,但newperson未在第二个程序中定义。为了解决这个问题,你可以创建一个新的文件newperson.py只包含类'的定义newperson.py``

# newperson.py 
class newperson(): 
    def __init__(self): 
     self.name = "" 
     self.dob = "" 

在这两个项目中,进口或咸菜后导入类:

from newperson import newperson 

或者,您可以使用字典而不是newperson类。

+0

谢谢:)修复它。我会继续使用附加文件,并参考它和词典,但是我还没有真正了解它们(真的是初学者),所以现在我只是重复这个类。再次感谢 :) – PCJonathan 2012-02-03 11:26:23

0

我认为unpickle(即pickle.load)你必须在命名空间的某个地方对newperson进行分类。尝试将类newperson导入到运行pickle.load的模块中。

相关问题