即使属性存在的Python 3 AttributeError的(Python 3 Attribute

2019-09-28 12:38发布

我有一组Python文件从而弥补了一个程序来保存信息的花絮,并通过标签搜索协会他们。 我有计划了很多版本的工作,但我最近做了什么,我认为是导致该程序就会失控一个微小的变化。 条目对象是数据存储的基础上 - 它拥有一个唯一的ID号码,昵称,的值,并且的标签列表。

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'

但经过查找和替换,该条目对象肯定有一个属性“名”:

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

谢谢!

Answer 1:

我想通了,我哪里错了! 我的程序有一个名为相关myMemory.dat其中存储的腌版本Memory对象和加载和保存程序的每次运行。 该Memory对象实质上的列表ENTRY要查询秒。 而此时我更新了所有我的代码中使用的名称时name ,而不是nickname ,我已经有数以百计的ENTRY保存对象myMemory.dat -每一个老的实例ENTRY与对象nickName属性而不是name属性。 当我打电话给其试图访问的功能ENTRY对象的name属性,该计划,因为抛出错误ENTRY有问题的对象没有这个属性。

解决方法:我通过循环Memory存储在对象myMemory.dat并复制所有信息到新的ENTRY S IN新的Memory对象。 我救了新的Memory ,以myMemory.dat ,且运行完好如新!



文章来源: Python 3 AttributeError even though attribute exists