Python:自我随机没有定义

时间:2017-06-13 16:10:21

标签: python micropython

我在相机上使用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

现在,我收到了两条不同的错误消息:

  

有时在self.findBlobs()或" self.possibleLandmarkIDs =   []"

     

属性错误:','对象没有属性" possibleLandmarkIDs'

有时候''是一个' int'或者是'(箭头标志)',这可能是因为计算机和相机之间的通信中断了。

另一种类型的错误是打印(类型(自我)),"局部变量self在定义之前被调用"是错误消息。调用函数时从未发生过这个错误,它总是在函数内。

这些错误完全随机发生。这种方法被称为几百次突然它不起作用?由于这个类的实例不在任何特定范围内(它就像你打开了一个解释器并输入>>> a = 0),我无法想象它被删除了由垃圾收集器。

有谁知道它可能是什么,或者我可以继续研究? 谢天谢地期待你的回答, desireentz

编辑:

这里我添加了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()

1 个答案:

答案 0 :(得分:1)

因为我起初认为这是一个普通的(微)python错误,所以我在这里创建了这个主题。然后我在OpenMV摄像机的官方论坛上发布了相同的问题并上传了整个文件。固件开发人员之一回答我,这个micropython的实现没有堆栈保护,因为这会花费很多性能。我使用的是递归函数,当堆栈已满时会破坏堆,从而产生这些“随机”错误。