Python逻辑错误:我的变量被正确分配,在一些“for”和“if”语句之后,它变为None而不触及它

时间:2012-05-09 19:54:52

标签: python variables nonetype

正如我在标题中所说,此代码中的变量点在某些逻辑语句之后变为None值,而根本不触及该变量。正如您在代码中看到的,“打印点”有两种不同的陈述。我做了实验,第一个给出了输出“[(1,1,1),(1,1,1)......”,如前所述。然而第二个给我输出“无”。有人可以告诉我为什么会发生这种情况,以及是否有任何方法可以纠正它?

def detectDots(surface):
   dots = [(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1)]
   print dots
   for y in range(0,480):
       for x in range(0,640):
            color = surface.get_at((x,y))
            if color.r > 250 and color.g < 70 and color.b < 80:
                inDots = True
                notInDots = []
                for i in range(0,8):
                    print dots
                    if math.sqrt((abs(x - dots[i][0])*abs(x - dots[i][0]))+(abs(y - dots[i][1])*abs(y - dots[i][1]))) < 20:
                        dots[i] = (((dots[i][0]*dots[i][2]+x)/(dots[i][2]+1)),((dots[i][1]*dots[i][2]+y)/(dots[i][2]+1)),(dots[i][2]+1))
                    else:
                        notInDots.append(i)
                        inDots = False
            else:
                dots = None

2 个答案:

答案 0 :(得分:8)

我的猜测是该行

dots = None

负责将dots设置为None

由于您的第二次打印已经打印None,这意味着(0,0)的第一个颜色不匹配

if color.r > 250 and color.g < 70 and color.b < 80:

删除最外面的其他分支或仅使用dots = None替换行pass会使点不是None值。

答案 1 :(得分:0)

您是否尝试在行dot = None?

之前放置一个调试语句

我会按照

的方式尝试
import code
code.interact(local=locals(),banner="Check dots = None")

紧接在您的行之前

dots = None

然后您可以看到哪个表面位置不符合您的r,g,b条件并验证您是否正确读取了r,g,b值。

这是一个博客链接(不是我的),解释了如何使用一些Python调试工具 http://aymanh.com/python-debugging-techniques#launching-an-interactive-console-with-codeinteract