web-dev-qa-db-ja.com

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

私はこのエラーの説明を見つけました:

Python通常、「呼び出し可能」は関数です。メッセージは、数値(>「int」)が関数(「呼び出し可能」)であるかのように処理していることを意味するため、= Pythonは何をすべきかわからないので、>停止します。

Sum()がリストで使用できることも読んだので、ここで何が問題になっているのだろうと思いますか?

私はIDLEモジュールで試してみましたが、うまくいきました。ただし、pythonインタプリタでは機能しません。それがどのように行われるかについてのアイデアはありますか?

7
mattste

「sum」関数を整数データ型に再定義した可能性があります。したがって、整数は範囲を渡すことができるものではないことを正しく伝えています。

これを修正するには、インタプリタを再起動してください。

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ビルトインをシャドウすると、表示されているエラーが発生する可能性があります

>>> 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に変換する必要はありません。

19
John La Rooy

これは、コードのどこかに、次のようなものがあることを意味します。

sum = 0

組み込み和(これはis呼び出し可能)をint(そうではない)でシャドウします。

17
lvc

インタプリタでは、再起動してそのような問題を修正するのが簡単です。インタープリターを再始動したくない場合は、それを修正する別の方法があります。

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

これは、dictlistなどの他の組み込み関数に値を割り当てた場合にも役立ちます。

3
Burhan Khalid