2012-06-26 19 views
6

Estoy tratando de averiguar por qué me sale un error cuando uso la función suma en un rango.¿Por qué aparece el error 'int' no se puede llamar cuando se usa la función suma()?

Aquí está el código:

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 

Y aquí está el error:

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

encontré esta explicación para el error:

In Python a "callable" is usually a function. The message means you are treating a number (an >"int") as if it were a function (a "callable"), so Python doesn't know what to do, so it >stops.

También he leído que sum() es capaz de ser utilizado en listas, así que me pregunto qué está pasando mal aquí.

Lo probé en un módulo IDLE y funcionó bien. Sin embargo, no funciona en el intérprete de Python. ¿Alguna idea de cómo puede ser eso?

+5

Esto funciona perfectamente para mí ... ¿nombraste una 'suma 'variable antes de llamar a la función? – jadkik94

+0

versión de Python? – mattste

+0

Estoy en 2.7. ¿Estás en 3? – jadkik94

Respuesta

16

Probablemente haya redefinido su función "suma" para que sea un tipo de datos entero. Entonces, con razón te está diciendo que un número entero no es algo por lo que puedas pasar un rango.

Para arreglar esto, reinicie su intérprete.

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 

Si remedar la orden interna sum, se puede obtener el error que está viendo

>>> 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 

Además, tenga en cuenta que sum no tendrán ningún problema en la set no hay necesidad de convertirlo a un list

15

Esto significa que en algún otro lugar en su código, usted tiene algo así como:

sum = 0 

Qué sombras la suma orden interna (que es exigible) con un int (que no lo es).

+0

El código que se muestra es el programa completo. Ojalá fuera así de simple. ¿Alguna otra idea? – mattste

+2

@mattste reinicia tu intérprete de python y pruébalo. – jamylak

+1

Funciona ahora. ¡Gracias por la ayuda! – mattste

3

En el intérprete es fácil reiniciarlo y solucionar dichos problemas. Si no desea reiniciar el intérprete, hay otra forma de solucionarlo:

Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) 
[GCC 4.4.5] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> l = [1,2,3] 
>>> sum(l) 
6 
>>> sum = 0 # oops! shadowed a builtin! 
>>> sum(l) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not callable 
>>> import sys 
>>> sum = sys.modules['__builtin__'].sum # -- fixing sum 
>>> sum(l) 
6 

Esto también es muy útil si pasó a asignar un valor a cualquier otra orden interna, como dict o list

Cuestiones relacionadas