Python 3 AttributeError,即使属性存在
我有一组python文件,它们组成了一个程序,用于保存信息的花边新闻并通过标记关联进行搜索。我的程序适用于许多版本,但我最近做了一个我认为是微小的改变,导致程序失控。ENTRY对象是数据存储的基础—它拥有唯一的ID号、昵称、值和标记列表Python 3 AttributeError,即使属性存在,python,replace,attributes,find,attributeerror,Python,Replace,Attributes,Find,Attributeerror,我有一组python文件,它们组成了一个程序,用于保存信息的花边新闻并通过标记关联进行搜索。我的程序适用于许多版本,但我最近做了一个我认为是微小的改变,导致程序失控。ENTRY对象是数据存储的基础—它拥有唯一的ID号、昵称、值和标记列表 class ENTRY: def __init__(self, idNum, nickName, value, tagList): self.idNum = idNum self.nickName = nickName self.val
class ENTRY:
def __init__(self, idNum, nickName, value, tagList):
self.idNum = idNum
self.nickName = nickName
self.value = value
self.tagList = tagList
我意识到在其他文件中请求输入时,我将“昵称”属性替换为“名称”,因此我决定查找所有提及的“昵称”并将其替换为“名称”,以使代码更易于理解。我在ENTRY.py文件以及程序中所有相关的python文件中都这样做了。我甚至对它们进行了校对,以确保更改不会干扰任何区分大小写的函数调用或任何事情
问题:现在,当我运行程序时,我得到一个属性错误:
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'
有人知道当属性在类构造函数中定义得非常清楚时,会出现属性错误的原因吗
有关完整类代码的更多完整信息,请参阅github存储库:
以及特定的提交,其中包含导致崩溃的更改:
谢谢大家! 我知道哪里出了问题!我的程序与名为
myMemory.dat
的文件相关联,该文件存储Memory
对象的pickle版本,并随程序的每次运行一起加载和保存。Memory
对象本质上是要查询的条目的列表。当我更新所有代码以使用名称name
而不是nickname
时,我已经在myMemory.dat
中保存了数百个ENTRY
对象,每个对象都是旧ENTRY
对象的一个实例,具有昵称
属性而不是name
属性。当我调用试图访问条目
对象的名称
属性的函数时,程序抛出了一个错误,因为所讨论的条目
对象没有该属性
修复方法:我循环遍历存储在myMemory.dat
中的内存
对象,并将所有信息复制到新内存
对象中的新条目
s中。我将新的内存
保存到myMemory.dat
,程序运行如新 我知道哪里出了问题!我的程序与名为myMemory.dat
的文件相关联,该文件存储Memory
对象的pickle版本,并随程序的每次运行一起加载和保存。Memory
对象本质上是要查询的条目的列表。当我更新所有代码以使用名称name
而不是nickname
时,我已经在myMemory.dat
中保存了数百个ENTRY
对象,每个对象都是旧ENTRY
对象的一个实例,具有昵称
属性而不是name
属性。当我调用试图访问条目
对象的名称
属性的函数时,程序抛出了一个错误,因为所讨论的条目
对象没有该属性
修复方法:我循环遍历存储在myMemory.dat
中的内存
对象,并将所有信息复制到新内存
对象中的新条目
s中。我将新的内存
保存到myMemory.dat
,程序运行如新 确保您正在运行您认为是的版本。看起来您正在将用户编写的类从一个文件导入正在执行的另一个文件,对吗?如果是这样,您是否尝试退出Python解释器并重新启动它?除非退出,否则重新运行时不会更新对依赖模块的更改。嗯,我已经退出并重新打开了程序好几次,所以我认为这不是问题所在。但是,您的评论让我想到了哪些文件正试图访问ENTRY.name,我认为问题在于我在数据库中使用了一堆旧的ENTRY对象。我可以创建新条目,但是当我尝试访问旧条目的name属性时,会出现错误。我将尝试修复它,并更新我的帖子,如果这是一个问题!确保您正在运行您认为是的版本。看起来您正在将用户编写的类从一个文件导入正在执行的另一个文件,对吗?如果是这样,您是否尝试退出Python解释器并重新启动它?除非退出,否则重新运行时不会更新对依赖模块的更改。嗯,我已经退出并重新打开了程序好几次,所以我认为这不是问题所在。但是,您的评论让我想到了哪些文件正试图访问ENTRY.name,我认为问题在于我在数据库中使用了一堆旧的ENTRY对象。我可以创建新条目,但是当我尝试访问旧条目的name属性时,会出现错误。我将尝试修复它,并更新我的帖子,如果这是一个问题!
class ENTRY:
def __init__(self, idNum, name, value, tagList):
self.idNum = idNum
self.name = name
self.value = value
self.tagList = tagList