2013-02-05 30 views
1

当我拨打列表时,我得到'list' object is not callable。参见下面的命令行会话。“列表”对象在“小数”列表上不可调用

>>> sys.version_info 
sys.version_info(major=2, minor=7, micro=3, releaselevel='final', serial=0) 
>>> d = map(Decimal, u'0.97 + .03'.split('+')) 
>>> d 
[Decimal('0.97'), Decimal('0.03')] 
>>> sum(d) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
TypeError: 'list' object is not callable 

我正在使用python 2.7.3。这里的sum(d)的预期输出是1.00

我看到它在Python网站上的工作。 http://docs.python.org/2/library/decimal.html#quick-start-tutorial

+1

类型(总和)评估的是什么? –

+0

'>>>类型(总和)' –

+5

@Muquaddim - 这是你的问题。你已经通过在某处创建了一个具有相同名称的列表来影响内置'sum'功能...... – mgilson

回答

4

我怀疑你的代码中的类型列表中有一个名为sum的局部变量,因此你会得到这个错误。在Python中,你可以重新绑定任何内建函数。您仍然可以使用__builtin__模块调用内置函数sum

>>> sum = [] # override builtin sum function 
>>> from decimal import Decimal 
>>> d = map(Decimal, ['0.97', '0.03']) 
>>> sum(d) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'list' object is not callable 
>>> __builtins__.sum(d) 
Decimal('1.00') 

我会建议不过内建的功能或类型后未命名的局部变量。捕获这些错误的好方法是在代码上运行pylint Python静态代码检查器。一些编辑器或IDE允许轻松地与pylint进行整合。

相关问题