TypeError:'int' 对象不可调用
- 2024-12-17 08:31:00
- admin 原创
- 146
问题描述:
鉴于以下情况:
a = 23
b = 45
c = 16
round((a/b)*0.9*c)
运行上述程序会输出错误:
TypeError: 'int' object is not callable.
如何将输出四舍五入为整数?
解决方案 1:
在您的代码中的其他地方,您会看到类似这样的内容:
round = 42
然后当你写
round((a/b)*0.9*c)
被解释为对绑定到 的对象进行函数调用round
,即int
。结果失败。
问题在于任何代码都将 绑定int
到名称round
。找到并删除它。
解决方案 2:
我得到了同样的错误(TypeError:'int'对象不可调用)
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:
round
通过将 绑定到其他地方来停止践踏int
它。
解决方案 4:
我也遇到了这个问题,但情况略有不同。
设想:
param = 1
def param():
.....
def func():
if param:
var = {passing a dict here}
param(var)
这里看起来很简单而且是一个愚蠢的错误,但是由于实际代码中有多行代码,我花了一些时间才弄清楚我使用的变量名与我的函数名相同,因此我收到此错误。
将函数名称更改为其他名称并且它有效。
因此,基本上,根据我的理解,此错误意味着您试图将整数用作函数,或者更简单地说,被调用的函数名称也在代码中的某个地方用作整数。因此,只需尝试找出被调用函数名称的所有出现情况,并查看它是否在某个地方被用作整数。
我费了好大劲才找到这个,因此,在这里分享,以便其他人可以节省时间,以防他们遇到这个问题。
解决方案 5:
导致此错误“ TypeError: 'int' object is not callable ”的原因有两个
函数有一个整数值
考虑
a = [5, 10, 15, 20]
max = 0
max = max(a)
print(max)
这将产生 TypeError:'int' 对象不可调用。
只需将变量名“max”更改为var(say)。
a = [5, 10, 15, 20]
var = 0
var = max(a)
print(var)
上述代码将完美运行,没有任何错误!!
缺少数学运算符
考虑
a = 5
b = a(a+1)
print(b)
这也会产生 TypeError:'int' 对象不可调用。
您可能忘记在中间放置运算符(在本例中为 '*')
解决方案 6:
就我而言,我改变了:
return <variable>
和:
return str(<variable>)
尝试以下操作,它一定会起作用:
str(round((a/b)*0.9*c))
解决方案 7:
有时问题可能是在计算时忘记了运算符。
例如:它
print(n-(-1+(math.sqrt(1-4(2*(-n))))/2))
必须
是
print(n-(-1+(math.sqrt(1-4*(2*(-n))))/2))
高血压
解决方案 8:
如上所述,您int
的代码中可能有一个变量名为 round(类型为 ),删除该变量应该可以消除错误。但是,对于 Jupyter 笔记本,简单地清除单元格或删除它可能不会使变量超出范围。在这种情况下,您可以在删除变量后重新启动笔记本以重新开始。
解决方案 9:
您始终可以使用以下方法来消除函数歧义。
__import__('__builtin__').round((a/b)*0.9*c)
__builtin__
是所有内置函数(如 round、min、max 等)的模块名称。对来自其他模块的函数使用适当的模块名称。
解决方案 10:
我遇到此错误是因为我正在调用模型内部使用@property 装饰器的函数。
@property
def volume_range(self):
return self.max_oz - self.min_oz
当我尝试在序列化器中调用此方法时,出现错误“TypeError:'int'对象不可调用”。
def get_oz_range(self, obj):
return obj.volume_range()
简而言之,问题在于 @property 装饰器将函数变成了 getter。您可以在此 SO 响应中了解有关 property() 的更多信息。
对我来说,解决方案是像访问变量一样访问 volume_range,而不是将其作为函数调用:
def get_oz_range(self, obj):
return obj.volume_range # No more parenthesis
解决方案 11:
仅供参考:'int' object is not callable
如果您意外地在 Pandas 数据框中使用了.size()
方法(不存在)而不是.size
属性,也会出现错误,如下所示。因此,错误可能会出现在意想不到的地方。
import pandas as pd
s = pd.Series([35, 52, 63, 52])
print("unique numbers: ",s.unique())
print("number of unique values: ",s.unique().size())