Python 3 AttributeError,即使属性存在

时间:2016-06-24 16:51:58

标签: python replace attributes find attributeerror

我有一组python文件,它们组成了一个程序,用于保存信息的花絮并通过标签关联进行搜索。我让这个程序适用于许多版本,但我最近做了一些我认为是一个小改动,导致程序失控。 ENTRY对象是数据存储的基础 - 它包含唯一的ID号,昵称,值和标签列表。

class ENTRY:

def __init__(self, idNum, nickName, value, tagList):
    self.idNum = idNum
    self.nickName = nickName
    self.value = value
    self.tagList = tagList

我意识到我可以互换地引用" nickName"属性为" name"当要求输入其他文件时,所以我决定查找并替换所有提及" nickName"与"名称"使代码更容易遵循。我在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'

但是在查找和替换之后,ENTRY对象肯定有一个属性&#39; name&#39;:

class ENTRY:

def __init__(self, idNum, name, value, tagList):
    self.idNum = idNum
    self.name = name
    self.value = value
    self.tagList = tagList

当在类构造函数中非常明确地定义属性时,是否有人知道我会得到属性错误的原因?

有关完整类代码的更完整信息,请参阅github存储库:https://github.com/kylelambert101/TagMem

具有崩溃诱导的特定提交更改: https://github.com/kylelambert101/TagMem/commit/68987f2e6ed98012f36ec5230b3dac6f09373489

谢谢!

1 个答案:

答案 0 :(得分:0)

我弄明白我哪里出错了!我的程序与一个名为myMemory.dat的文件相关联,该文件存储Memory对象的pickle版本,并在每次运行程序时加载并保存。 Memory对象本质上是要查询的ENTRY列表。当我更新所有代码以使用名称name而不是nickname时,我已经在ENTRY中保存了数百个myMemory.dat个对象 - 每个都是具有ENTRY属性而不是nickName属性的旧name对象。当我调用试图访问ENTRY对象的name属性的函数时,程序引发了错误,因为有问题的ENTRY对象没有该属性。

修复:我循环浏览Memory中存储的myMemory.dat对象,并将所有信息复制到新ENTRY对象中的新Memory中。我将新的Memory保存到myMemory.dat,该程序可以正常运行!