私は "User"オブジェクトが作成され、操作されるPython用のプログラムを作成しています。オブジェクトがNoneTypeであるというエラー?
私はUser
オブジェクトを表すノードを持つオブジェクトのリンクリストを持っています。
Iユーザーオブジェクトとして変数x
を設定、リストを検索して、返されたノードデータ、(例えばx = List.search("a username")
ためsearch
を検索名前のユーザーオブジェクトを返す場合)に等しい変数を設定することにより、私はUser
を得ますこのx
変数のUser
クラスのメソッドを使用しようとすると、NoneTypeエラーが発生します。
この原因は何ですか?
x
がオブジェクトUser
に直接割り当てられている場合(つまりx = User()
)、前者の場合は機能しません。
コードの注意:.txtファイルからコマンドを受け取ります。これらのコマンドは、「追加」と「フレンド」です。
class Node (object):
def __init__(self,initdata):
self.data = initdata
self.next = None # always do this – saves a lot
# of headaches later!
def getData (self):
return self.data # returns a POINTER
def getNext (self):
return self.next # returns a POINTER
def setData (self, newData):
self.data = newData # changes a POINTER
def setNext (self,newNext):
self.next = newNext # changes a POINTER
class UnorderedList():
def __init__(self):
self.head = None
def isEmpty (self):
return self.head == None
def add (self,item):
# add a new Node to the beginning of an existing list
temp = Node(item)
temp.setNext(self.head)
self.head = temp
def length (self):
current = self.head
count = 0
while current != None:
count += 1
current = current.getNext()
return count
def search (self,item): #NOW RETURNS OBJECT IN LIST
current = self.head
while current != None:
if current.getData().name == item:
return current.getData()
else:
current = current.getNext()
return None
def remove (self,item):
current = self.head
previous = None
found = False
while not found:
if current.getData() == item:
found = True
else:
previous = current
current = current.getNext()
if previous == None:
self.head = current.getNext()
else:
previous.setNext(current.getNext())
class User():
def __init__(self):
self.name = ""
self.friendsList = UnorderedList()
def setName(self,info):
self.name = info
def getName(self):
return self.name
def removeFriend(self, item):
self.friendsList.remove(item)
def addFriend(self, item):
self.friendsList.add(item)
def searchList(self, item):
self.friendsList.search(item)
def __str__(self):
return self.name
def main():
inFile = open("FriendData.txt")
peopleList = UnorderedList()
for line in inFile:
textList = line.split()
if "Person" in textList:
newUser = User()
newUser.setName(textList[1])
if peopleList.search(newUser.getName()) != None:
print("This user is already in the program")
else:
peopleList.add(newUser)
print(newUser.getName(),"now has an account")
elif "Friend" in textList:
#PROBLEM OBJECTS a AND b BELOW
a = peopleList.search(textList[1]) #returns user1 object
b = peopleList.search(textList[2]) # return user2 object
b.getName()
if peopleList.search(textList[1]) == None:
print("A person with the name", textList[1], "does not currently exist")
elif peopleList.search(textList[2]) == None:
print("A person with the name", textList[2], "does not currently exist")
elif textList[1]==textList[2]:
print("A person cannot friend him/herself")
elif peopleList.search(textList[1]).searchList(textList[2])!= None:
print(textList[1],"and",textList[2],"are already friends")
elif peopleList.search(textList[2]).searchList(textList[1]) != None:
print(textList[2],"and",textList[1],"are already friends")
#else:
#a.friendsList.add(b) #adds user 2 to user1 friendlist
#b.addFriend(a)
#print(a.getName(),"and",b.getName(),"are now friends")
main()
エラー:友達が別のユーザーのオブジェクトにLinkedListは、各ユーザーオブジェクトを追加し、その逆
がコード想定している
Traceback (most recent call last):
File "C:/Users/rsaen/Desktop/Python Prgms/Friends.py", line 137, in <module>
main()
File "C:/Users/rsaen/Desktop/Python Prgms/Friends.py", line 119, in main
b.getName()
AttributeError: 'NoneType' object has no attribute 'getName'
解析されたが、.txtファイル
['Person', 'Rachel']
['Person', 'Monica']
['Friend', 'Rachel', 'Monica']
['Friend', 'Monica', 'Rachel']
['Friend', 'Rachel', 'Ross']
['Person', 'Ross']
['Friend', 'Rachel', 'Ross']
['Person', 'Joey']
['Person', 'Joey']
['Friend', 'Joey', 'Joey']
['Friend', 'Joey', 'Rachel']
['Person', 'Chandler']
['Friend', 'Chandler', 'Monica']
['Friend', 'Chandler', 'Rachel']
['Friend', 'Ross', 'Chandler']
['Friend', 'Phoebe', 'Rachel']
['Person', 'Phoebe']
['Friend', 'Phoebe', 'Rachel']
['Exit']
コードを表示.... –
少し長くて少しスパゲッティですが、私はそれを示すことができます – user3491700
長いコードを投稿せず、問題を示す特定の関連コードを投稿してください。そのコードが何であるかわからない場合は、実行するまで試してください。何百行ものコードを私たちにダンプして、それを掘り下げることを期待しないでください。 –