2012-06-26 11 views
6

Sto cercando di capire perché sto ricevendo un errore quando si utilizza la funzione somma su un intervallo.Perché l'oggetto 'int' non è richiamabile quando si utilizza la funzione sum()?

Ecco il codice:

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 

E qui è l'errore:

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

ho trovato questa spiegazione per l'errore:

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.

Ho anche letto che sum() è in grado di essere utilizzato negli elenchi, quindi mi chiedo cosa sta andando storto qui?

Ho appena provato in un modulo IDLE e ha funzionato bene. Tuttavia, non funziona nell'interprete Python. Qualche idea su come può essere?

+5

Questo funziona perfettamente per me ... hai nominato una variabile 'sum' prima di chiamare la funzione? – jadkik94

+0

Versione Python? – mattste

+0

Sono a 2,7. Sei su 3? – jadkik94

risposta

16

Probabilmente è stata ridefinita la funzione "somma" come un tipo di dati intero. Quindi ti sta dicendo giustamente che un numero intero non è qualcosa che puoi superare un intervallo.

Per risolvere questo problema, riavviare l'interprete.

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 

Se l'ombra sum incorporato, è possibile ottenere l'errore che state vedendo

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

Si noti inoltre che sum funziona bene sul set non v'è alcuna necessità di convertirlo in un list

15

Ciò significa che da qualche altra parte nel codice, si dispone di qualcosa come:

sum = 0 

che ombreggia la somma incorporato (che è callable) con un int (che non è).

+0

Il codice mostrato è l'intero programma. Mi piacerebbe che fosse così semplice. Altre idee? – mattste

+2

@mattste riavvia il tuo interprete python e provalo. – jamylak

+1

Funziona ora. Grazie per l'aiuto! – mattste

3

Nell'interprete è facile riavviarlo e risolvere tali problemi. Se non si desidera riavviare l'interprete, c'è un altro modo per risolvere il problema:

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 

Questo si rivela utile anche se ti è capitato di assegnare un valore a qualsiasi altro incorporato, come dict o list

Problemi correlati