2012-06-26 51 views
6

Tôi đang cố gắng tìm ra lý do tại sao tôi gặp lỗi khi sử dụng hàm tổng trên một phạm vi.Tại sao đối tượng 'int' không phải là lỗi có thể gọi được xảy ra khi sử dụng hàm sum()?

Đây là mã:

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 

Và đây là lỗi:

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

tôi tìm thấy lời giải thích này cho các lỗi:

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.

Tôi cũng đã đọc rằng sum() có khả năng được sử dụng trong danh sách, vì vậy tôi tự hỏi điều gì đang xảy ra ở đây?

Tôi vừa thử nó trong một mô-đun IDLE và nó hoạt động tốt. Tuy nhiên, nó không hoạt động trong trình thông dịch python. Bất kỳ ý tưởng về cách đó có thể được?

+5

Điều này làm việc hoàn hảo cho tôi ... bạn đã đặt tên biến 'sum' trước khi gọi hàm? – jadkik94

+0

Phiên bản Python? – mattste

+0

Tôi đang ở trạng thái 2.7. Bạn có trên 3 không? – jadkik94

Trả lời

16

Bạn có thể đã xác định lại hàm "tổng hợp" của mình thành loại dữ liệu số nguyên. Vì vậy, nó là đúng cho bạn biết rằng một số nguyên không phải là một cái gì đó bạn có thể vượt qua một phạm vi.

Để khắc phục điều này, hãy khởi động lại trình thông dịch của bạn.

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 

Nếu bạn shadow các sum dựng sẵn, bạn có thể nhận được lỗi bạn đang nhìn thấy

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

Ngoài ra, lưu ý rằng sum sẽ làm việc tốt trên các set không có cần phải chuyển nó sang một list

15

này có nghĩa là ở một nơi khác trong mã của bạn, bạn có cái gì đó như:

sum = 0 

Mà bóng tối tổng dựng sẵn (mà callable) với một int (mà không phải là).

+0

Mã được hiển thị là toàn bộ chương trình. Tôi ước nó đơn giản. Bất kỳ ý tưởng nào khác? – mattste

+2

@mattste khởi động lại trình thông dịch python của bạn và thử nó. – jamylak

+1

Hoạt động ngay bây giờ. Cảm ơn đã giúp đỡ! – mattste

3

Trong trình thông dịch, dễ khởi động lại và khắc phục các sự cố như vậy. Nếu bạn không muốn khởi động lại dịch viên, có một cách khác để sửa chữa nó:

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 

này cũng có ích nếu bạn xảy ra để gán giá trị cho bất kỳ BUILTIN khác, như dict hoặc list

Các vấn đề liên quan