[英]Why do I get "TypeError: 'str' object is not callable" with this code?
我有一些代码,例如:
def example(parameter):
global str
str = str(parameter)
print(str)
example(1)
example(2)
第一次调用example
有效,但第二次我收到如下错误:
Traceback (most recent call last):
File "test.py", line 7, in <module>
example(2)
File "test.py", line 3, in example
str = str(parameter)
TypeError: 'str' object is not callable
为什么会发生这种情况,我该如何解决?
这就是问题:
global str
str = str(mar)
您正在重新定义str()
含义。 str
是字符串类型的内置 Python 名称,您不想更改它。
为局部变量使用不同的名称,并删除global
语句。
虽然不在您的代码中,但另一个难以发现的错误是在尝试格式化字符串时缺少%
字符:
"foo %s bar %s coffee"("blah","asdf")
但它应该是:
"foo %s bar %s coffee"%("blah","asdf")
缺少%
将导致相同的TypeError: 'str' object is not callable
。
在我的例子中,我有一个具有同名方法和字符串属性的类,我试图调用该方法但正在获取字符串属性。
重要的是要注意(如果您是通过 Google 来到这里的) “TypeError: 'str' object is not callable ”仅意味着尝试将先前声明为 String-type 的变量用作函数(例如通过最后加括号。)
如果您使用任何其他内置方法作为变量名,您也可以获得完全相同的错误消息。
如果您有变量str
并尝试调用str()
函数,则会出现此错误。
每当发生这种情况时,只需发出以下命令(它也在上面发布)
>>> del str
那应该解决它。
另一种情况:与对象的__repr__
函数__repr__
,其中format()
调用不透明地失败。
在我们的例子中,我们在__repr__
上使用了__repr__
装饰器@property
该对象传递给format()
。 所述@property
装饰使__repr__
对象变成一个字符串,其然后导致str
对象不是可调用错误。
检查您的输入参数,并确保您没有一个命名的type
。 如果是这样,那么您将发生冲突并收到此错误。
str = 'Hello World String'
print(str(10)+' Good day!!')
即使我在上面的代码中也遇到了这个问题,因为我们正在隐藏str()
函数。
解决办法是:
string1 = 'Hello World String'
print(str(10)+' Good day!!')
我有同样的错误。 就我而言,不是因为名为str
的变量。 但是因为我用str参数和变量命名了一个函数。
same_name = same_name(var_name: str)
我循环运行它。 第一次运行正常。 我第二次遇到这个错误。 将变量重命名为与函数名称不同的名称修复了这个问题。 所以我认为是因为 Python 曾经在作用域中关联了一个函数名,第二次尝试将左侧部分( same_name =
)关联为对函数的调用并检测到str
参数不存在,所以它丢失了,然后它抛出那个错误。
我刚刚遇到的一个问题是不小心调用了一个字符串
"Foo" ("Bar" if bar else "Baz")
您可以像这样将字符串并排放置来连接字符串
"Foo" "Bar"
但是因为第一个例子中的开放括号它认为我试图调用"Foo"
也可能是您试图以错误的方式进行索引:
a = 'apple'
a(3) ===> 'str' object is not callable
a[3] = l
我还有另一个问题,同样的错误!
原来我在模型上创建了一个属性,但愚蠢地用括号调用了该属性。
希望这可以帮助某人!
建议不要使用str
int
list
等作为变量名,即使 python 允许它。 这是因为在尝试访问名称相同的保留关键字时可能会造成此类事故
就我而言,我有一个带有方法的类。 该方法没有将“self”作为第一个参数,并且在我调用该方法时抛出了错误。 一旦我将 'self,' 添加到方法的参数列表中,就可以了。
我从不完整的方法检查中得到了这个警告:
if hasattr(w, 'to_json'):
return w.to_json()
######### warning, 'str' object is not callable
它假设w.to_json
是一个字符串。 解决方案是添加一个callable()
检查:
if hasattr(w, 'to_json') and callable(w.to_json):
然后警告消失了。
FWIW 我只是在一个稍微不同的用例上遇到了这个问题。 我搜索并搜索我的代码,寻找我可能在何处使用了“str”变量,但找不到它。 我开始怀疑我导入的模块之一可能是罪魁祸首……但唉,它是格式化打印语句中缺少的“%”字符。
下面是一个例子:
x=5
y=6
print("x as a string is: %s. y as a string is: %s" (str(x) , str(y)) )
这将导致输出:
TypeError: 'str' object is not callable
更正是:
x=5
y=6
print("x as a string is: %s. y as a string is: %s" % (str(x) , str(y)) )
导致我们的预期输出:
x as a string is: 5. y as a string is: 6
如果您从未在代码中使用过str
关键字或str()
方法,您可能会通过查看此问题的现有答案而感到疑惑。 所以,让我写下你的解决方案,
转到您的代码并检查是否有与您的方法名称完全相似的变量名称。 例如在这个场景中,
class Shapes:
def __init__(self,colour):
self.colour=colour
def colour(self):
print("colour:",self.colour)
在类Shape
我有一个名为color
的变量,我还有一个名为color
的方法。 因此,实际发生的情况是,当您创建一个对象并通过该对象调用您的方法时,python 解释器认为您指的是变量,而不是方法。
myShape=Circle("pink",7)
myShape.colour()
所以简单的解决方案是更改方法名称或变量名称。
我也收到了这个错误。 对我来说,这只是一个错字:
我写:
driver.find_element_by_id("swal2-content").text()
虽然它应该是:
driver.find_element_by_id("swal2-content").text
如果未导入数学库,它也会出现相同的错误,
import math
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.