我有一个简单的脚本:
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
这个错误是什么意思?为什么我会得到它?我怎样才能修复它?
这是mcve!
>>> []()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
也可以尝试{}()和()。消息类型错误:“X”对象不可调用表示您编写了表达式(一些\u参数),其中表达式是X类型的实例,此类型不支持在函数调用语法中使用。大多数时候写这篇文章是因为您认为表达式是一个函数或其他可调用类型。
在完全理解错误的含义和解决方法之前,了解Python中的内置名称很重要。
在Python中,内置名称是Python解释器已经分配了预定义值的名称。该值可以是函数或类对象。默认情况下,无论范围如何,这些名称始终可用。分配给这些名称的一些值表示Python语言的基本类型,而其他值则非常有用。
截至Python的最新版本-3.6.2-目前有61个内置名称。完整的名称列表以及它们应该如何使用,可以在留档部分内置函数中找到。
然而,需要注意的一点是,Python不会阻止您重新分配内置名称。内置名称不保留,Python也允许将其用作变量名称。
以下是使用内置dict的示例:
>>> dict = {}
>>> dict
{}
>>>
如您所见,Python允许我们分配cript
名称来引用字典对象。
简单地说,发生错误的原因是您在脚本中重新分配了内置名称列表:
list = [1, 2, 3, 4, 5]
执行此操作时,您重写了内置名称的预定义值。这意味着您不能再使用预定义的值list,它是一个表示Python列表的类对象。
因此,当您试图使用列表
类从范围
对象创建新列表时:
myrange = list(range(1, 10))
Python引发了一个错误。错误显示“list”对象不可调用的原因是,如上所述,名称list是指list对象。因此,上述操作相当于:
[1, 2, 3, 4, 5](range(1, 10))
这当然毫无意义。不能调用列表对象。
如果您遇到类似的错误,例如这个说“对象不可调用”的错误,您很可能在代码中使用内置名称作为变量。在这种情况下,修复就像重命名违规变量一样简单。例如,要修复上述代码,我们可以将list
变量重命名为int
:
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会发出警告。如果你经常犯这样的错误,那么花时间投资其中一个项目可能是值得的。
上述错误的另一个常见原因是试图使用括号(()
)而不是方括号([]
)索引列表。例如:
>>> 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”对象在尝试访问列表时不可调用。
环境: Python 3.7 Windows 10 64位 问题: 下面这段代码过去工作没有问题。我不得不移动我的Py魅力项目的文件夹,现在我得到了这个错误消息:“TypeError:'str'对象不可调用”。 守则: 错误输出: 我尝试的是: 我在一个空白的python文档中隔离了这段代码。我想确保这个问题没有连接到其他地方的代码。当我执行这段独立的代码时,我得到了同样的问题。 我在这里看到了关
您好:)我正在使用SnowballStemmer软件包将单词插入词干。不知何故,我遇到了一个错误,不知道如何修复它。我很高兴能得到任何帮助。 代码是: 我得到这个错误:
问题内容: 我正在尝试编写一个程序,该程序允许您输入班级中的学生人数,然后为每个学生输入3个测试成绩以计算平均值。我是编程新手,但会不断收到错误消息,我不了解它的含义或解决方法。这是我到目前为止所拥有的: 问题答案: 当你写 您的意图是“运行这段代码时间,我刚才输入的值在哪里”。但是在Python,你传递给事情一个声明需求是某种迭代对象的。在这种情况下,您想要的只是一个statement。这将生成
错误(25,1):PLS-00103:遇到符号“EXEC” 放下桌上的学生;提交;
我可以从一个简单的脚本成功加载TextBlob模块,但不能从Flask应用程序加载。我将向您展示代码和错误。 加载一个简单的脚本工作: 从烧瓶应用程序加载时抛出错误: 错误: 我使用的是textblob版本0.11。0与pip一起安装。
我怎么能修好它? replaceAll函数中此字符“{”错误。谢谢。