我收到“ TypeError:'列表'对象不可调用”。如何解决此错误?[重复]
问题内容:
这个问题已经在这里有了答案 :
TypeError:’list’对象在python中不可调用 (11个答案)
去年关闭。
我有一个简单的脚本:
list = [1, 2, 3, 4, 5]
myrange = list(range(1, 10))
for number in list:
if number in myrange:
print(number, 'is between 1 and 10')
但是,每当我尝试运行脚本时,Python都会引发错误:
Traceback (most recent call last):
File "python", line 2, in <module>
TypeError: 'list' object is not callable
这个错误是什么意思?我为什么得到它?我该如何解决?
问题答案:
在您完全理解错误的含义以及如何解决之前,了解Python中的内置名称很重要。
什么是内置名称?
在Python中,内置名称是 Python解释程序已经分配了预定义值的名称 。该值可以是 函数 或 类
对象。无论范围如何,这些名称始终默认为可用。分配给这些名称的某些值表示Python语言的基本类型,而其他一些则非常有用。
从Python的最新版本3.6.2开始,当前有 61个
内置名称。名称及其使用方式的完整列表可在文档部分“
内置函数”中找到
。
但是要注意的重要一点是, Python 不会 阻止您 重新 分配内置名称。内置名称不是保留的,Python也允许将它们用作变量名称。
这是使用dict
内置示例:
>>> dict = {}
>>> dict
{}
>>>
如您所见,Python允许我们分配dict
名称,以 引用字典对象 。
“ TypeError:’列表’对象不可调用”是什么意思?
简而言之,发生错误的原因是因为您在脚本中 重新分配 了 内置名称 list
:
list = [1, 2, 3, 4, 5]
完成此操作后, 您将覆盖内置name的预定义值 。这意味着您不能再使用的预定义值list
,它是表示Python列表的类对象。
因此,当您尝试使用list
该类从range
对象创建新列表时:
myrange = list(range(1, 10))
Python引发了一个错误。错误显示“’list’对象不可调用”的原因是,如上所述,该名称list
是指列表对象。因此,上述操作等效于:
[1, 2, 3, 4, 5](range(1, 10))
当然哪个没有意义。您不能调用列表对象。
我该如何解决错误?
如果您遇到类似的错误,例如此错误说“对象不可调用”,则很可能在代码中使用了内置名称作为变量。在这种情况下,修复就像重命名有问题的变量一样简单。例如,要修复以上代码,我们可以将list
变量重命名为ints
:
ints = [1, 2, 3, 4, 5] # Rename "list" to "ints"
myrange = list(range(1, 10))
for number in ints: # Renamed "list" to "ints"
if number in myrange:
print(number, 'is between 1 and 10')
PEP8-官方Python样式指南-包含有关命名变量的许多建议。
这是新老Python用户经常犯的错误。这就是为什么总是避免使用很重要内置的名称作为变量,如str
,dict
,list
,range
,等。
当您尝试使用内置名称作为变量时,许多linter和IDE都会警告您。如果您经常犯此错误,则可能值得您花时间投资这些程序之一。
我没有重命名内置名称,但仍收到“ TypeError:’list’对象不可调用”。是什么赋予了?
导致上述错误的另一个常见原因是尝试使用括号(()
)而不是方括号([]
)为列表建立索引。例如:
>>> lst = [1, 2]
>>> lst(0)
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
lst(0)
TypeError: 'list' object is not callable
有关完整问题的说明以及解决该问题的方法,请参见TypeError:尝试访问list时不可调用’list’对象。