TypeError:'int'对象不可调用

时间:2012-03-19 09:05:32

标签: python python-2.7

给出以下整数和计算

from __future__ import division

a = 23
b = 45
c = 16

round((a/b)*0.9*c)

这导致:

TypeError: 'int' object is not callable.

如何将输出舍入为整数?

8 个答案:

答案 0 :(得分:106)

代码中的其他地方你有类似的东西:

round = 42

然后当你写

round((a/b)*0.9*c)

被解释为对绑定到round的对象的函数调用,即int。那就失败了。

问题是无论代码将int绑定到名称round。找到并删除它。

答案 1 :(得分:5)

通过将round绑定到其他地方,停止在其他地方踩踏int

答案 2 :(得分:2)

我得到了同样的错误

def xlim(i,k,s1,s2):
   x=i/(2*k)
   xl=x*(1-s2*x-s1*(1-x)) /(1-s2*x**2-2*s1*x(1-x))
   return xl 
... ... ... ... 

>>> xlim(1,100,0,0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in xlim
TypeError: 'int' object is not callable

阅读这篇文章后,我意识到我忘记了乘法*所以

def xlim(i,k,s1,s2):
x=i/(2*k)
xl=x*(1-s2*x-s1*(1-x)) /(1-s2*x**2-2*s1*x*(1-x))
return xl 

xlim(1.0,100.0,0.0,0.0)
0.005

答案 3 :(得分:2)

在我的情况下,我改变了:

return <variable>

使用:

return str(<variable>)

尝试使用以下内容并且必须正常工作:

str(round((a/b)*0.9*c))

答案 4 :(得分:1)

有时问题是在计算时忘记了运算符。
示例:
print(n-(-1+(math.sqrt(1-4(2*(-n))))/2)) 而不是
它必须是
print(n-(-1+(math.sqrt(1-4*(2*(-n))))/2))

HTH

答案 5 :(得分:0)

我也面临这个问题,但情况略有不同。

场景:

param = 1

def param():
    .....
def func():
    if param:
        var = {passing a dict here}
        param(var)

这里看起来很简单,也是一个愚蠢的错误,但是由于实际代码中有多行代码,因此我花了一些时间才知道我使用的变量名与函数名相同,因此收到此错误。

将函数名称更改为其他名称,并且可以正常工作。

因此,基本上,根据我的理解,此错误意味着您正在尝试使用整数作为函数,或更简单地说,被调用的函数名在代码中的某些地方也被用作整数。 因此,只需尝试找出所有出现的被调用函数名称,然后查看该名称是否在某处被用作整数。

我很难找到它,因此,在这里分享它,以便其他人可以节省他们的时间,以防万一他们陷入该问题。

希望这会有所帮助!

答案 6 :(得分:0)

如前所述,您的代码中可能会有一个名为round的变量(类型为int),将其删除应该可以消除该错误。但是,对于Jupyter笔记本而言,仅清除单元格或将其删除可能不会使变量超出范围。在这种情况下,您可以在删除变量后重新启动笔记本计算机以重新开始。

答案 7 :(得分:0)

这个错误有两个原因“TypeError: 'int' object is not callable

  1. 函数具有整数值

考虑

a = [5, 10, 15, 20]
max = 0
max = max(a)
print(max)

这将产生 TypeError: 'int' object is not callable.

只需将变量名称“max”更改为 var(say)。

a = [5, 10, 15, 20]
var = 0
var = max(a)
print(var)

上面的代码会完美运行,没有任何错误!!

  1. 缺少数学运算符

考虑

a = 5
b = a(a+1)
print(b)

这也会产生 TypeError: 'int' object is not callable.

您可能忘记将运算符放在中间(本例中为“*”)