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”添加到方法的参数列表中,就没有问题。