TypeError:'str'对象不可调用(Python)

码:

import urllib2 as u import os as o inn = 'dword.txt' w = open(inn) z = w.readline() b = w.readline() c = w.readline() x = w.readline() m = w.readline() def Dict(Let, Mod): global str inn = 'dword.txt' den = 'definitions.txt' print 'reading definitions...' dell =open(den, 'w') print 'getting source code...' f = u.urlopen('http://dictionary.reference.com/browse/' + Let) a = f.read(800) print 'writing source code to file...' f = open("dic1.txt", "w") f.write(a) f.close() j = open('defs.txt', 'w') print 'finding definition is source code' for line in open("dic1.txt"): if '<meta name="description" content=' in line: j.write(line) j.close() te = open('defs.txt', 'r').read().split() sto = open('remove.txt', 'r').read().split() print 'skimming down the definition...' mar = [] for t in te: if t.lower() in sto: mar.append('') else: mar.append(t) print mar str = str(mar) str = ''.join([ c for c in str if c not in (",", "'", '[', ']', '')]) defin = open(den, Mod) defin.write(str) defin.write(' ') defin.close() print 'cleaning up...' o.system('del dic1.txt') o.system('del defs.txt') Dict(z, 'w') Dict(b, 'a') Dict(c, 'a') Dict(x, 'a') Dict(m, 'a') print 'all of the definitions are in definitions.txt' 

第一个Dict(z, 'w')起作用,然后第二个Dict(z, 'w')出现错误:

 Traceback (most recent call last): File "C:\Users\test.py", line 64, in <module> Dict(b, 'a') File "C:\Users\test.py", line 52, in Dict str = str(mar) TypeError: 'str' object is not callable 

有人知道为什么吗?

@Greg Hewgill:

我已经试过了,我得到的错误:

 Traceback (most recent call last): File "C:\Users\test.py", line 63, in <module> Dict(z, 'w') File "C:\Users\test.py", line 53, in Dict strr = ''.join([ c for c in str if c not in (",", "'", '[', ']', '')]) TypeError: 'type' object is not iterable 

这就是问题:

 global str str = str(mar) 

你正在重新定义str()意思。 str是stringtypes的内置Python名称,您不想更改它。

为局部variables使用不同的名称,并删除global语句。

虽然不在您的代码中,但另一个难以察觉的错误是在string格式化尝试中缺less%字符:

 "foo %s bar %s coffee"("blah","asdf") 

但应该是:

 "foo %s bar %s coffee"%("blah","asdf") 

缺less的%将导致相同的TypeError: 'str' object is not callable

在我的情况下,我有一个类有一个方法和一个string属性的同名,我试图调用该方法,但得到的string属性。

另一种情况是:调用format()调用不透明失败的对象的__repr__函数。

在我们的例子中,我们在__repr__上使用了一个__repr__装饰器, @property该对象传递给一个format()__repr__修饰器导致__repr__对象变成一个string,这导致str对象不可调用错误。

你可以得到这个错误,如果你有variablesstr并试图调用str()函数。

我有同样的错误。 在我的情况下是不是因为一个名为str的variables。 但是因为我用str参数和variables命名了一个函数。

same_name = same_name(var_name:str)

我在一个循环中运行它。 第一次运行正常。 第二次我得到这个错误。 将该variables重命名为与该函数名称不同的名称。 所以我认为这是因为Python一旦在一个作用域中关联了一个函数名,第二次尝试将左边的部分(same_name =)作为一个调用关联到函数,并检测到str参数不存在,那么它会抛出这个错误。

在我的情况下,我有一个在其中的方法。 该方法没有作为第一个参数的“自我”,当我调用方法时抛出错误。 一旦我将“self”添加到方法的参数列表中,就没有问题。