Ich habe eine Reihe von Python-Dateien, die ein Programm zum Speichern von Leckerbissen von Informationen und suchen sie über Tag-Zuordnung. Ich hatte das Programm für viele Versionen arbeiten, aber ich habe vor kurzem gemacht, was ich dachte, war eine geringfügige Änderung, die das Programm zu verrückt spielen verursacht. Das ENTRY-Objekt ist die Grundlage des Datenspeichers - es enthält eine eindeutige ID-Nummer, einen Kurznamen, einen Wert und eine Liste von Tags.Python 3 AttributeError obwohl Attribut existiert
class ENTRY:
def __init__(self, idNum, nickName, value, tagList):
self.idNum = idNum
self.nickName = nickName
self.value = value
self.tagList = tagList
Ich erkannte, dass ich austauschbar wurde dem „Spitznamen“ Attribut als „Name“, die sich, wenn für die Eingabe in anderen Dateien zu fragen, so habe ich beschlossen, auf Suchen und Ersetzen alle Erwähnungen von „nickname“ mit „name“ Machen Sie den Code einfacher zu folgen. Ich tat dies in der ENTRY.py Datei sowie alle damit verbundenen Python-Dateien im Programm. Ich habe sie sogar Korrektur gelesen, um sicher zu gehen, dass die Änderung nicht mit irgendwelchen Groß- und Kleinschreibungsaufrufen oder so etwas zu tun hat.
Das Problem: Nun, wenn ich das Programm ausführen, bekomme ich ein Attribut Fehler:
Traceback (most recent call last):
File "/Memory/TagMem.py", line 210, in <module>
main()
File "/Memory/TagMem.py", line 207, in main
dispatch(userChoice)
File "/Memory/TagMem.py", line 171, in dispatch
nameList('todo')
File "/Memory/TagMem.py", line 103, in nameList
memory.searchListNames(queryList)
File "/Memory/Memory.py", line 96, in searchListNames
each.printName()
File "/Memory/ENTRY.py", line 49, in printName
print("({}) {}".format(self.idNum, self.name))
AttributeError: 'ENTRY' object has no attribute 'name'
Aber nach dem Suchen und Ersetzen, die ENTRY Objekt mit Sicherheit ein Attribut ‚name‘ hat:
class ENTRY:
def __init__(self, idNum, name, value, tagList):
self.idNum = idNum
self.name = name
self.value = value
self.tagList = tagList
Kennt jemand einen Grund, den ich einen Attributfehler erhalten würde, wenn das Attribut im Klassenkonstruktor sehr klar definiert ist?
Umfassendere Informationen über den gesamten Klassencode finden Sie im Github-Repository: https://github.com/kylelambert101/TagMem
und die spezifischen begeht mit der Crash auslösende Veränderungen: https://github.com/kylelambert101/TagMem/commit/68987f2e6ed98012f36ec5230b3dac6f09373489
Thank you!
Stellen Sie sicher, dass Sie die Version ausführen, die Sie für richtig halten. – user2357112
Es sieht so aus, als ob Sie eine benutzerdefinierte Klasse aus einer Datei in eine andere Datei importieren, die Sie ausführen, richtig? Wenn das der Fall ist, haben Sie versucht, den Python-Interpreter zu beenden und wieder hochzufahren? Änderungen an Ihren abhängigen Modulen werden nicht aktualisiert, wenn Sie sie erneut ausführen, es sei denn, Sie haben sie beendet. – Jeff
Hmmm, ich habe das Programm einige Male verlassen und wieder geöffnet, also glaube ich nicht, dass das das Problem ist. Ihr Kommentar hat mich jedoch dazu gebracht, darüber nachzudenken, welche Dateien versuchen, auf ENTRY.name zuzugreifen, und ich denke, das Problem ist, dass ich die Datenbank mit einer Menge alter ENTRY-Objekte inkorporiert habe.Ich kann neue Einträge gut machen, aber wenn ich versuche, auf das Namensattribut der alten zuzugreifen, erhalte ich den Fehler. Ich werde versuchen, es zu beheben und meinen Beitrag zu aktualisieren, wenn das das Problem ist! – Kyle