首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"List object is not callable“Python错误

"List object is not callable“Python错误
EN

Stack Overflow用户
提问于 2012-12-19 08:48:22
回答 2查看 2.5K关注 0票数 3

我正在做一个有趣的Python图像库项目。然而,我不能理解为什么我一直收到这个代码的"list not callable“错误:

代码语言:javascript
复制
def __computeTopColors(self):
    temp1, temp2, temp3, temp4 = [], [], [], []

    max = (0,0,0)
    for v in self.PixelVals: 
        if (v[0] > max[0]) and (v[1] > max[1]) and (v[2] > max[2]):
            max = v

    min = (1000,1000,1000)
    for v in self.PixelVals:
        if (v[0] < min[0]) and (v[1] < min[1]) and (v[2] < min[2]):
            min = v

    for pval in self.PixelVals:
        if (min[0] <= pval[0] <= int(((max[0])/2))) and (min[1] <= pval[1] <= int(((max[1])/2))):
            temp1.append(pval) 

    return temp1

def temp(self): 
    print self.temp

注意:这实际上是一个类的摘录,但我不认为这是特别相关的。self.PixelVals是(R,G,B)形式的列表元组。self.temp是我用来测试__computeTopColors方法的临时方法;我在__init__中将self.temp设置为等于self.__computeTopColors

回溯:

代码语言:javascript
复制
Traceback (most recent call last):
  File "fiveColors.py", line 39, in <module>
    a.temp()

第39行是我的代码块中的最后一行。

EN

回答 2

Stack Overflow用户

发布于 2012-12-19 08:50:20

你在某处用一个列表跟踪了int。别再这么做了。当你在做的时候不要再跟踪min()max()了。

票数 6
EN

Stack Overflow用户

发布于 2012-12-19 09:09:04

我将该代码粘贴到一个文件中,并添加了以下内容:

代码语言:javascript
复制
>>> class Foo(object):
...    pass
>>> a = Foo()
>>> a.PixelVals = [(1,2,3),(4,5,6)]
>>> __computeTopColors(a)
[(1, 2, 3)]

所以这段代码没有任何问题。

忽略这一点--有风格上的问题,只是它们都没有破坏代码。例如:

你永远不应该给你的变量命名,像minmax,它们和内置的functions.

  • Don't的名字一样,加上大量的额外的括号,这些括号没有任何功能,只会让事情变得更难读--int(((max[1])/2))显然与int(b[1]/2)完全等同,但它需要几秒钟和一点思考才能知道你这样做的目的,甚至需要更长的时间来验证你做得是否正确(这总是一个问题,int(((max[1])/2)))。
  • 您应该将变量命名为PixelVals,而不是CamelCase,等等。

所以很明显,问题出在你代码的其他部分,你没有向我们展示。

您添加了回溯的最后一行,并说它来自“我的代码块中的最后一行”。最后一行是:

代码语言:javascript
复制
print self.temp

该错误会对此进行抱怨:

代码语言:javascript
复制
a.temp()

很明显,您向我们展示的代码不是您正在运行的代码。但我可以由此猜测问题所在:

a可能是保存list的类变量或全局变量。你试图把它作为一个函数来调用。因此,Python非常明智地告诉您列表对象是不可调用的。

或者,这是另一种猜测:

I将self.temp设置为等于self.__computeTopColors

这将用一个不同的变量替换temp方法。正如所写的,它实际上会用绑定的方法__computeTopColors替换方法temp,这不可能解决您所看到的问题(尽管这是一件非常奇怪和不好做的事情)。但也许这不是真的,您实际上将self.temp设置为等于调用该绑定方法的self.__computeTopColors()-the结果。很可能是一份名单。现在,您还没有向我们展示的其他一些代码试图通过执行a.temp()来调用temp方法,并且因为您已经将temp方法替换为list而不是可调用的东西,所以会引发相同的错误。

事实上,即使您没有替换temp方法,它也不是很有用:

代码语言:javascript
复制
def temp(self): 
    print self.temp

除了绑定方法temp (例如,<bound method Foo.temp of <__main__.Foo object at 0x106d0f2d0>>)的实现表示之外,它不可能打印任何其他内容,这对您没有任何用处。

无论是第一个问题,第二个问题,还是完全不同的问题,这都指向一个更大的问题:不要给变量指定任意的、无意义的名称-如果您这样做了,请非常小心,不要在不同的地方重复使用相同的名称来表示不同的东西。如果你够幸运,你会混淆Python并得到一个错误。如果你不走运,你只会把你自己和你代码的其他读者弄糊涂。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13943916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档