类型错误:'float'对象不可调用。

21

我正在尝试在以下等式中使用数组中的值:

for x in range(len(prof)):
    PB = 2.25 * (1 - math.pow(math.e, (-3.7(prof[x])/2.25))) * (math.e, (0/2.25)))

当我运行时,出现以下错误:

Traceback (most recent call last):
  File "C:/Users/cwpapine/Desktop/1mPro_Chlavg", line 240, in <module>
    PB = float(2.25 * (1 - math.pow(math.e, (-3.7(prof[x])/2.25))) * (math.e, (0/2.25)))
TypeError: 'float' object is not callable

问题的原因是什么,如何解决?


5
你在这里缺少一次运算:-3.7(prof[x]) 应该为 -3.7 * (prof[x]) 或者 ... - mouad
2
我在一个类中遇到了相同的异常,其中我有一个浮点属性和一个同名方法。将其中一个重命名解决了我的问题。 - Giacomo Pigani
5个回答

49

有一个运算符缺失,可能是一个*

-3.7 need_something_here (prof[x])

“is not callable” 的错误是因为括号和缺少运算符,这使得 Python 尝试将 -3.7(一个浮点数)的结果作为函数进行调用,而这是不允许的。
在这种情况下,括号也是不必要的,以下可能足够/正确:
-3.7 * prof[x]

正如Legolas所指出的那样,还有其他需要解决的问题:
2.25 * (1 - math.pow(math.e, (-3.7(prof[x])/2.25))) * (math.e, (0/2.25)))
                                  ^-- op missing
                                                    extra parenthesis --^
               valid but questionable float*tuple --^
                                     expression yields 0.0 always --^

1
注意:这里有比开括号更多的闭括号,第二个逗号似乎是错位的。 - Legolas

3
问题出在 -3.7(prof[x]) 上,看起来像是一个函数调用(注意括号)。只需要使用 * 就可以了,像这样:-3.7*prof[x]

请不要抄袭他人的答案。 - Andrei

3

您忘记在-3.7(prof[x]) 之间加上一个*

修改后应为:

for x in range(len(prof)):
    PB = 2.25 * (1 - math.pow(math.e, (-3.7 * (prof[x])/2.25))) * (math.e, (0/2.25)))

此外,我发现有一个 ( 缺失了。我数了一下,出现了 6 次 ( 和 7 次 )。我认为 (math.e, (0/2.25)) 缺少一个函数调用(可能是 math.pow,但这只是我的猜测)。


谢谢Legolas和其他所有人,我注意到我的方程式中有几个错别字。也许我需要休息一下,让我的眼睛放松一下 :-) - Corey
1
请不要抄袭他人的答案。 - Andrei

1
问题已得到解答,但对于其他人来说,出现相同错误的原因可能很有可能是以下原因之一: 有时候,当您使用一个与内置函数同名的变量名,并且当您稍后尝试调用该内置函数时,它会给您返回一个类型错误。 例如,在代码中的某个位置,您将一个变量定义为:

sum = 0

可能将其用作全局数据框中的累加器变量。现在,当您正在定义一个函数以调用内置函数sum()时,它会给您返回一个类型错误,因为您已经覆盖了内置函数名称。 这就是为什么您应该避免在代码中使用内置函数名称,如str、range、sum等作为变量名称的原因。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

1

虽然这可能不是特别针对这个问题的答案,但你遇到这个错误的另一个原因可能是你已经将“range”定义为一个变量。

range = 0
for x in range(len(array)): 
#will give an error, because it's trying to multiply "range" with "(len(array))"

解决方案是将您的变量重命名为同义词(period),或在其后添加一些内容(range1、range_a)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接