【问题标题】:TypeError: 'int' object is not callable on line 2TypeError:'int' 对象在第 2 行不可调用
【发布时间】:2015-05-26 22:07:33
【问题描述】:

我对 Python 很陌生,所以我正在阅读关于 runestone 的交互式指南并输入了以下代码:

t = int(input("number of yrs plsz"))
a = 10000(1+(0.08/12))**12t
print(a)

我收到此错误

TypeError: 'int' object is not callable on line 2

【问题讨论】:

  • 你为什么用python-2.7python-3.x 标记这个?它与您询问的部分并不真正相关,但您的代码将在两个版本上执行不同的操作,因为 input 是一个不同的函数。此外,除非您特别需要与两者兼容的东西,否则不应同时标记它。
  • 对不起,我真的不知道有什么不同,我想得到更多的回应。我会注意的,谢谢
  • “我想获得更多回应”是添加更多标签的坏主意。添加与您的问题相关的标签。试图吸引那些实际上并不关心您的问题但确实关心您的标签的人只是一种收集反对票的方式。
  • 你可以考虑修复它 :-) 你说的是哪个版本?

标签: python python-2.7 python-3.x


【解决方案1】:

10000() 是调用函数的语法 (myfunction())。相反,与* 运算符相乘。

通过使用括号,您正在尝试调用函数10000,因为10000 是一个整数,而不是一个函数,所以这是无法完成的。

【讨论】:

    【解决方案2】:

    您不能使用括号进行乘法运算,您需要像这样显式键入所有乘法运算符:

    a = 10000 * (1 + (0.08 / 12)) ** (12 * t) # basically you can't call 10000() as a func
    

    【讨论】:

    • 已编辑,因为我很确定“你可以用括号乘法”只是一个错字。
    • f(a) 其中fa 都是整数在Python 中无效。
    • @abarnert 你知道我的意思(;
    • 是的,这就是为什么我编辑了我很确定你的意思,而不是评论这是错误的或不赞成投票之类的。 :)
    • 是的,一开始我想:他到底改变了什么?
    【解决方案3】:

    你不能使用你在第 2 行使用的符号。

    当您编写 a = 1000(something) 时,python 认为您正在尝试调用名为“1000”的方法。

    改写为

    a = 10000 * (1+(0.08/12))**12t)

    另外我假设你正在尝试做 12*t,你不能只说 12t。那也是无效的语法。

    真的应该这样

    a = 10000 * (1+(0.08/12))**12*t
    

    我不确定以这种方式重写它的数学方面,但至少它会运行。

    【讨论】:

      【解决方案4】:

      我想你想写的是:

      a = 10000 * (1 + (0.08 / 12)) ** (12 * t)
      

      这就像一个魅力,但错误的根源可能会让您感到困惑。问题是,一旦 Python 在任何对象后面看到括号,就说

      obj(p1)
      

      它像这样调用对象的__call__ 方法

      obj.__call__(p1)
      

      如果未定义,则会出现错误。所以在你的代码中发生的事情是 Python 到达了a = 10000(... 部分,它试图做这样的事情

      10000.__call__(1 + (0.08 / 12))
      

      由于10000int 类的一个实例,它试图为该类找到__call__ 方法的定义。如您所料,int 类没有定义__call__ 方法,因此出现错误。

      【讨论】:

        【解决方案5】:

        试试这个 -

        a = 10000*(1+(0.08/12))**12*t.
        

        如果要将 t 乘以 12,请加上括号。

        【讨论】:

        • 12t 只是无效语法,10000(arg)'int' object is not callable
        • “如果你将 t 乘以 12,则放入括号”是什么意思?听起来您建议他应该在最后一个乘法中使用圆括号,就像他在第一个乘法中尝试的那样,这将产生完全相同的问题。
        • 我建议如果他想要 t 为指数,那么他可以放入 (12*t),这似乎很明显。
        • 我认为他的意思是 **(12*t) ?
        猜你喜欢
        • 2012-04-03
        • 1970-01-01
        • 2013-04-03
        • 2017-12-20
        • 2023-03-03
        相关资源
        最近更新 更多