在我一直从事的一个大型程序中,我遇到了一个属性错误:
line 154, in __ExtINT
DebugVar=Self.__Preset # Originally, I had Self.__Preset directly in an if statement. I added this line and put DebugVar in the if statement, so I could be sure what was causing the error.
AttributeError: '__Readitem' object has no attribute '_ReadItem__Preset'
我确信它是在__init__
函数中设置的,并花了一段时间试图找出为什么会出现这个错误。当我发现python使用一个字典来存储它的所有变量时,所以我把print(Self.__dict__)
放在导致错误的行之前,这样我就可以看到存在哪些属性了。我很惊讶地在字典里看到, '_Readitem__Preset': True}
。为什么它说它不存在,在错误中呢?你知道吗
我尝试了DebugVar=Self.__dict__['_Readitem__Preset']
而不是DebugVar=Self.__Preset
,得到了:
line 154, in __ExtINT
DebugVar=Self.__dict__['_Readitem__Preset']
KeyError: '_Readitem__Preset'
然后我试着把self.__Preset=False
直接放在__init__
后面,这样我就可以确定它确实存在。你知道吗
值得一提的是,在我尝试手动从变量中提取值之前,显示了两个字典,这意味着最初代码只工作一次。我更改代码后,只显示了一个字典。你知道吗
有没有人自己遇到过这个问题,或者知道为什么会这样?你知道吗
那很痛苦。你知道吗
我已经设法弄清楚了为什么会出现错误并修复了代码。以下是我如何得到错误的描述,以及我如何克服它,以防有人好奇,或自己得到这个错误:
在我的代码中,我有一个基本上是一个类别的类。它存储属性,例如它是预定义的还是用户定义的,它是否包含任何子类别,它可能拥有的任何子类别,等等。。这些子类别是包含该类的更多实例的列表。然后,我不得不创建它的另一个版本,在初始化时写入文件。如果我像以前一样这样做,那么它会将只应写入文件一次的数据写入文件,多次写入文件。我决定创建一个“子类”,它的工作方式与主类略有不同。下面是一些简单的代码,展示了我试图实现的结构:
正如我在问题中所说的,python将其变量存储在字典中,您可以使用
.__dict__
检查对象的属性。如果这样做,您将看到每个属性都有其类的名称作为前缀。如果您尝试运行上面的代码,那么由于某种原因,它将崩溃,因为它试图使用错误的前缀来查找属性。你知道吗我的解决方案是删除子类,并对我的代码执行以下操作:
这可能不是最好的方法,但是它修复了这个bug。你知道吗
相关问题 更多 >
编程相关推荐