Python: self 随机未定义
Python: self randomly not defined
我是 运行 我的代码,在那台相机上使用 micropython:OpenMV Camera
我在 python 中随机得到一个错误,即 self 未定义。这就是我的 python 代码的样子:(整个文件会太长)
class BlobAnalyser:
#
#constructor and lots of functions
#...
#
def findLandmarkCombo(self, bnoAngle, playingTowardsBlue):
self.findBlobs()
print(type(self))
self.possibleLandmarkIDs = []
if len(self.blobs) == 0:
return None
for blobIndex in range(len(self.blobs)):
self.possibleLandmarkIDs.append([])
#and so on and so on
现在,我收到了 2 条不同的错误消息:
sometimes within self.findBlobs() or at "self.possibleLandmarkIDs =
[]"
AttributeError: ',' object has no attribute 'possibleLandmarkIDs'
有时','是'int'或'(箭头)',这可能是因为计算机和相机之间的通信中断了。
另一种类型的错误在print(type(self))处,"local variable self was called before defined"是错误信息。调用函数时从未发生过此错误,它始终在函数内。
这些错误完全是随机发生的。这个方法调用了几百次突然就不行了?而且由于这个 class 的实例不在任何特定范围内(它的创建就像你打开了一个解释器并键入 >>> a = 0),我无法想象它会被垃圾收集器删除。
有没有人知道它可能是什么或者我是否可以继续研究?
谢天谢地,期待您的回答,
欲望
编辑:
这里我添加了findBlobs(self)函数:
def findBlobs(self):
img = sensor.snapshot()
#merge = True,
allBlobs = img.find_blobs(self.thresholds, pixels_threshold=200, area_threshold=150, merge=True)
self.blobs = []
print("=====")
i = 0
for blob in allBlobs:
i += 1
img.draw_string(blob.cx() - 5, blob.cy() - 5, str(i))
img.draw_rectangle(blob.rect())
self.blobs.append(blob)
print(str(i) + ": " + str(bin(blob.code())))
self.sortBlobs()
因为起初我认为这是一个一般的(微)python 错误,所以我在这里创建了这个主题。然后我在OpenMV相机的官方论坛上发布了同样的问题并上传了整个文件。固件的一位开发人员回答我说,这种 micropython 的实现没有堆栈保护,因为那会消耗很多性能。我正在使用一个递归函数,当堆栈已满时它会破坏堆,产生这些 "random" 错误。
我是 运行 我的代码,在那台相机上使用 micropython:OpenMV Camera
我在 python 中随机得到一个错误,即 self 未定义。这就是我的 python 代码的样子:(整个文件会太长)
class BlobAnalyser:
#
#constructor and lots of functions
#...
#
def findLandmarkCombo(self, bnoAngle, playingTowardsBlue):
self.findBlobs()
print(type(self))
self.possibleLandmarkIDs = []
if len(self.blobs) == 0:
return None
for blobIndex in range(len(self.blobs)):
self.possibleLandmarkIDs.append([])
#and so on and so on
现在,我收到了 2 条不同的错误消息:
sometimes within self.findBlobs() or at "self.possibleLandmarkIDs = []"
AttributeError: ',' object has no attribute 'possibleLandmarkIDs'
有时','是'int'或'(箭头)',这可能是因为计算机和相机之间的通信中断了。
另一种类型的错误在print(type(self))处,"local variable self was called before defined"是错误信息。调用函数时从未发生过此错误,它始终在函数内。
这些错误完全是随机发生的。这个方法调用了几百次突然就不行了?而且由于这个 class 的实例不在任何特定范围内(它的创建就像你打开了一个解释器并键入 >>> a = 0),我无法想象它会被垃圾收集器删除。
有没有人知道它可能是什么或者我是否可以继续研究? 谢天谢地,期待您的回答, 欲望
编辑:
这里我添加了findBlobs(self)函数:
def findBlobs(self):
img = sensor.snapshot()
#merge = True,
allBlobs = img.find_blobs(self.thresholds, pixels_threshold=200, area_threshold=150, merge=True)
self.blobs = []
print("=====")
i = 0
for blob in allBlobs:
i += 1
img.draw_string(blob.cx() - 5, blob.cy() - 5, str(i))
img.draw_rectangle(blob.rect())
self.blobs.append(blob)
print(str(i) + ": " + str(bin(blob.code())))
self.sortBlobs()
因为起初我认为这是一个一般的(微)python 错误,所以我在这里创建了这个主题。然后我在OpenMV相机的官方论坛上发布了同样的问题并上传了整个文件。固件的一位开发人员回答我说,这种 micropython 的实现没有堆栈保护,因为那会消耗很多性能。我正在使用一个递归函数,当堆栈已满时它会破坏堆,产生这些 "random" 错误。