繁体   English   中英

为什么使用此代码会出现“TypeError: 'str' object is not callable”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM