2012-02-03 16 views
3

現在、私はPythonプログラミングを学習しています(初心者です)。現在、私はファイルの練習に取り組んでいます(これは、私がしたいことをするのではなく、必要な設定です)残念ながら、私はおそらく複雑な(私にとっては)ショートカットを行うことはできません)AttributeError: 'module'オブジェクトに 'newperson'という属性がありません

現在使用していますPython 3.2.2

私は2つの異なるプログラムが必要です。 1つは、ユーザが入力したもの(名前とDOB)を入力し、それをリストのレコードに入れてバイナリファイルに書き込むことです。もう1つは、そのファイルを読み取り、パディングを使用してそのファイルをテーブルに出力することです。

コード:セカンド

まず

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() 

AttributeError: 'module' object has no attribute 'newperson' 

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)) 

問題は、私は2番目のプログラムを実行しようとすると、次のエラーを取得していますということです

on

people = pickle.load(myfile) 

残念ながら、私は他の質問への答えを見ている、のいずれかの解決策のどれも働いていないとき、私には適用されないか、ほとんどがちょうど私の頭の上にWAAAY行ってきました。

私は間違っていますか?

ご協力いただきありがとうございます。

答えて

5

pickleがファイルをロードするとき、newpersonインスタンスを作成しようとしますが、newpersonは2番目のプログラムで定義されていません。その問題を解決するために、あなたは、newperson.pyはちょうど両方のプログラムで

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

newperson.py``クラス `の定義を含む新しいファイルを作成してインポートまたはピクルスの後にクラスをインポートすることもできます

from newperson import newperson 

また、newpersonクラスの代わりに辞書を使用することもできます。

+0

ありがとうございました。私は追加ファイルの使用を続け、それらの辞書や辞書を念頭に置いておくつもりですが、まだ実際にはまだ初心者ではありませんので、今はクラスを繰り返していきます。再度、感謝します :) – PCJonathan

0

私はunpickle(つまりpickle.load)と思うのですが、名前空間のどこかでnewpersonをクラスする必要があります。 pickle.loadを実行するモジュールにクラスnewpersonをインポートしてみてください。

関連する問題