在使用sum函数对列表求和时,出现“int”对象不可调用的错误提示。

27
coinCount = [2 for i in range(4)]
total = sum(coinCount)

这给了我

TypeError: 'int' object is not callable

我不明白为什么

print type(coinCount)
给了我。
type <'list'>
2个回答

115

你之前在代码中当地定义了一个名为sum的局部变量,并将其绑定到一个int值。在代码片段中,你试图调用这个int。在尝试调用之前,可以使用print sum查看一下,不过通过代码检查可能会更快地发现问题。

这种问题就是为什么专业Python程序员一遍又一遍地告诉新手们“不要使用内置名称作为自己的变量!”即使对特定的代码片段似乎没有影响:这是一个可怕的习惯,如果你使用sumfilelist等标识符作为自己的变量或函数,那么这只是一个潜在的bug, 等待发生!-)


4
经常被推荐的一种替代方法是在可能与保留字和内置标识符冲突的标识符后面添加下划线后缀;即 type_sum_ 或者 from_(如果你喜欢用介词作为标识符)。 - cdleary
@cdleary 给出了非常有建设性的建议。我更喜欢这种方法,而不是在前面加下划线。 - XMAN

15

我想补充一下Alex Martelli所说的,不要使用sum作为变量名,但如果你的程序已经太长了或者你正在使用idle并且不想重新开始,你可以这样做:

sum2 = sum
del sum
将 sum 的值转移至 sum2(必要时),并删除变量 sum(以便您可以继续使用 sum 函数)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接