【问题标题】:TypeError: 'int' object is not callableTypeError:“int”对象不可调用
【发布时间】:2012-04-03 18:35:02
【问题描述】:

给定以下整数和计算

from __future__ import division

a = 23
b = 45
c = 16

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

这会导致:

TypeError: 'int' object is not callable.

如何将输出四舍五入为整数?

【问题讨论】:

  • 在 Python 2.7 和 2.4 下运行良好。
  • 我认为您的问题不在显示的代码中。
  • 2.7,不知道使用名为 round 的 int 存在问题。

标签: python python-2.7


【解决方案1】:

您始终可以使用以下方法来消除该功能的歧义。

__import__('__builtin__').round((a/b)*0.9*c)

__builtin__ 是所有内置函数的模块名称,如 round、min、max 等。为其他模块的函数使用适当的模块名称。

【讨论】:

    【解决方案2】:

    这个错误有两个原因“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。

    您可能忘记将运算符放在中间(在这种情况下为“*”)

    【讨论】:

      【解决方案3】:

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

      HTH

      【讨论】:

        【解决方案4】:

        我也遇到过这个问题,但情况略有不同。

        场景:

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

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

        将函数名称更改为其他名称并且有效。

        所以,基本上,根据我的理解,这个错误意味着您正在尝试将整数用作函数或更简单的术语,被调用的函数名称也在代码中的某处用作整数。 因此,只需尝试找出所有出现的被调用函数名称,并查看它是否在某处用作整数。

        我很难找到这个,所以在这里分享它,以便其他人可以节省他们的时间,以防万一他们遇到这个问题。

        【讨论】:

          【解决方案5】:

          我遇到了同样的错误(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,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
          

          坦克

          【讨论】:

          • 这实际上是一个不同的问题。查看接受的答案。
          • 我知道这是很久以前的事了,但这个答案实际上解决了我的问题。从我这里投票
          • 对我来说,这应该是答案。它解决了我的问题。
          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            就我而言,我改变了:

            return <variable>
            

            与:

            return str(<variable>)
            

            尝试以下方法,它必须有效:

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

            【讨论】:

              【解决方案8】:

              在你的代码中的其他地方你有一些看起来像这样的东西:

              round = 42
              

              那么当你写

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

              这被解释为对绑定到round 的对象的函数调用,这是一个int。这失败了。

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

              【讨论】:

              • 长话短说:不要将 var 和函数命名为相等。
              • 啊老false = true 问题。这个也抓住了我。蟒蛇是个狡猾(又狡猾)的情妇。
              【解决方案9】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-04-03
                • 2017-12-20
                • 2023-03-03
                • 2013-07-19
                相关资源
                最近更新 更多