2012-06-26 9 views
6

Próbuję dowiedzieć się, dlaczego pojawia się błąd podczas korzystania z funkcji sumy na zakresie.Dlaczego podczas korzystania z funkcji sum() nie pojawia się obiekt "int"?

Oto kod:

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 

I tu jest błąd:

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

Znalazłem wyjaśnienie błędu:

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.

Mam również przeczytać, że sum() może być używany na listach, więc zastanawiam się, co tu jest nie tak?

Po prostu wypróbowałem to w module IDLE i działało dobrze. Jednak nie działa w interpretera Pythona. Jakieś pomysły na to, jak to może być?

+5

Działa to idealnie dla mnie ... czy nazwałeś zmienną 'sum' przed wywołaniem funkcji? – jadkik94

+0

Wersja w języku Python? – mattste

+0

Mam 2,7. Czy jesteś na 3? – jadkik94

Odpowiedz

16

Prawdopodobnie ponownie zdefiniowano funkcję "sum" jako typ danych liczbowych całkowitych. Więc słusznie mówi ci, że liczba całkowita nie jest czymś, co możesz przekazać zakresowi.

Aby to naprawić, ponownie uruchom interpretera.

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 

Jeśli cień na sum polecenie wbudowane, można uzyskać błąd widzisz

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

Należy również pamiętać, że sum będzie działać dobrze na set nie ma potrzeby, aby przekształcić go w list

15

Oznacza to, że gdzieś w kodzie, masz coś takiego:

sum = 0 

Jakie cienie do wbudowanego sumę (który jest wymagalne) z int (co nie jest).

+0

Przedstawiony kod jest całym programem. Chciałbym, żeby to było takie proste. Jakieś inne pomysły? – mattste

+2

@mattste zrestartuj interpreter python i spróbuj go. – jamylak

+1

Działa teraz. Dzięki za pomoc! – mattste

3

W interpretera można łatwo go uruchomić i naprawić takie problemy. Jeśli nie chcesz, aby ponownie uruchomić interpreter, nie ma innego sposobu, aby je naprawić:

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 

To również jest przydatna, jeśli zdarzyło się przypisać wartość do jakiegokolwiek innego wbudowanego polecenia, jak dict lub list

Powiązane problemy