使用sum()函数时,为什么'int'对象不可出错?

mat*_*ste 7 python sum callable python-2.7

我想弄清楚为什么我在一个范围上使用sum函数时会出现错误.

这是代码:

data1 = range(0, 1000, 3)
data2 = range(0, 1000, 5)
data3 = list(set(data1 + data2)) # makes new list without duplicates
total = sum(data3) # calculate sum of data3 list's elements
print total
Run Code Online (Sandbox Code Playgroud)

这是错误:

line 8, in <module> total2 = sum(data3)
TypeError: 'int' object is not callable
Run Code Online (Sandbox Code Playgroud)

我找到了错误的解释:

在Python中,"可调用"通常是一个函数.该消息意味着您正在处理一个数字(>"int"),就好像它是一个函数("可调用"),因此Python不知道该怎么做,所以它>停止.

我还读到sum()能够在列表中使用,所以我想知道这里出了什么问题?

我刚刚在IDLE模块中尝试过,它工作正常.但是,它在python解释器中不起作用.关于如何做的任何想法?

Joh*_*ooy 19

您可能将"sum"函数重新定义为整数数据类型.所以它正确地告诉你,整数不是你可以传递范围的东西.

要解决此问题,请重新启动解释器.

Python 2.7.3 (default, Apr 20 2012, 22:44:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> data1 = range(0, 1000, 3)
>>> data2 = range(0, 1000, 5)
>>> data3 = list(set(data1 + data2)) # makes new list without duplicates
>>> total = sum(data3) # calculate sum of data3 list's elements
>>> print total
233168
Run Code Online (Sandbox Code Playgroud)

如果你sum隐藏内置,你可以得到你看到的错误

>>> sum = 0
>>> total = sum(data3) # calculate sum of data3 list's elements
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
Run Code Online (Sandbox Code Playgroud)

另外,请注意,sumset没有必要将其转换为a的情况下可以正常工作list


lvc*_*lvc 17

这意味着您的代码中的其他位置,您可以使用以下内容:

sum = 0
Run Code Online (Sandbox Code Playgroud)

这阴影内建的总和(这调用)与一个int(这是不是).

  • @mattste重新启动你的python解释器并尝试它. (2认同)