2012-06-26 22 views
6

मैं जब एक श्रृंखला पर योग फ़ंक्शन का उपयोग क्यों मैं एक त्रुटि हो रही है यह पता लगाने की कोशिश कर रहा हूँ। यहाँsum() फ़ंक्शन का उपयोग करते समय 'int' ऑब्जेक्ट कॉल करने योग्य त्रुटि क्यों नहीं होती है?

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 

और त्रुटि है:

यहाँ कोड है

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

मैं त्रुटि के लिए इस स्पष्टीकरण पाया:

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.

मैं भी पढ़ा है कि योग() सूचियों पर इस्तेमाल करने में सक्षम है, इसलिए मैं सोच रहा हूं कि यहां क्या गलत हो रहा है?

मैं सिर्फ एक निष्क्रिय मॉड्यूल में यह कोशिश की और यह ठीक काम किया। हालांकि, यह अजगर दुभाषिया में काम नहीं करता है। यह कैसे हो सकता है पर कोई विचार?

+5

की तरह, किसी भी अन्य निर्मित करने के लिए एक मूल्य निर्दिष्ट हुआ: आप दुभाषिया पुन: प्रारंभ नहीं करना चाहते हैं, वहाँ एक और तरीका है इसे ठीक करने के लिए है यह मेरे लिए पूरी तरह से काम करता है ... क्या आपने फ़ंक्शन को कॉल करने से पहले एक चर 'sum' नाम दिया था? – jadkik94

+0

पायथन संस्करण? – mattste

+0

मैं 2.7 पर हूं। क्या आप 3 पर हैं? – jadkik94

उत्तर

16

आप शायद अपने "राशि" समारोह नए सिरे से परिभाषित एक पूर्णांक डेटा प्रकार किया जाना है। तो यह आपको सही तरीके से बता रहा है कि एक पूर्णांक ऐसा कुछ नहीं है जिसे आप एक सीमा पार कर सकते हैं।

इसे ठीक करने के लिए, अपने दुभाषिया पुनरारंभ करें।

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 

आप sum builtin शैडो हैं, तो आप त्रुटि आप

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

भी देख रहे हैं प्राप्त कर सकते हैं, ध्यान दें कि sumset पर ठीक से काम करेंगे यह एक list में बदलने की कोई जरूरत नहीं है

15

इसका मतलब है कि कहीं और अपने कोड में, आप की तरह कुछ है: एक पूर्णांक के साथ

sum = 0 

कौन सा निर्मित योग छाया (जो प्रतिदेय है) (जो नहीं है)।

+0

दिखाया गया कोड पूरे कार्यक्रम है। काश यह इतना आसान था। कोई अन्य विचार? – mattste

+2

@mattste अपने पायथन दुभाषिया को पुनरारंभ करें और इसे आजमाएं। – jamylak

+1

अब काम करता है। सहायता के लिए धन्यवाद! – mattste

3
दुभाषिया उसे पुन: प्रारंभ और इस तरह की समस्याओं को ठीक करने के लिए अपने आसान में

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 

यह भी काम में आता है अगर आप dict या list