Code:
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'
Das erste Dict(z, 'w')
funktioniert und beim zweiten Mal tritt ein Fehler auf:
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
Weiß jemand warum das so ist?
@ Greg Hewgill:
Ich habe das bereits versucht und bekomme den Fehler:
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
str
Variablen um, einschließlich der in Zeile 53, über die sich dieser Fehler beschwert.Antworten:
Das ist das Problem:
global str str = str(mar)
Sie definieren neu, was
str()
bedeutet.str
ist der integrierte Python-Name des Zeichenfolgentyps, den Sie nicht ändern möchten.Verwenden Sie einen anderen Namen für die lokale Variable und entfernen Sie die
global
Anweisung.quelle
str()
Funktion auch als verfügbar__builtins__.str()
. Natürlich ist es eine schlechte Idee, das in 99,9999% der Fälle zu verwenden, denke ich.str()
Funktionalität zurückgegeben wird.del str
wenn Sie es versehentlich überschrieben haben und die eingebaute Funktionalität wiederhergestellt wird.Ein weiterer schwer zu erkennender Fehler ist, dass das
%
Zeichen bei einem Versuch der Zeichenfolgenformatierung fehlt, obwohl es nicht in Ihrem Code enthalten ist:"foo %s bar %s coffee"("blah","asdf")
aber es sollte sein:
"foo %s bar %s coffee"%("blah","asdf")
Das Fehlen
%
würde zum gleichen Ergebnis führenTypeError: 'str' object is not callable
.quelle
In meinem Fall hatte ich eine Klasse mit einer Methode und einer gleichnamigen Zeichenfolgeeigenschaft. Ich habe versucht, die Methode aufzurufen, aber die Zeichenfolgeeigenschaft abgerufen.
quelle
Sie können diesen Fehler erhalten, wenn Sie eine Variable haben
str
und versuchen, diestr()
Funktion aufzurufen .quelle
Es ist wichtig zu beachten (falls Sie von Google hierher gekommen sind), dass "TypeError: 'str' Objekt ist nicht aufrufbar " nur bedeutet, dass versucht wird, eine Variable, die zuvor als String-Typ deklariert wurde, als Funktion zu verwenden (z. B. von am Ende Klammern hinzufügen.)
Sie können genau dieselbe Fehlermeldung auch erhalten, wenn Sie eine andere integrierte Methode als Variablennamen verwenden.
quelle
Ein weiterer Fall: Spielen mit der
__repr__
Funktion eines Objekts, bei dem einformat()
Aufruf nicht transparent fehlschlägt.In unserem Fall haben wir einen
@property
Dekorateur für das verwendet__repr__
und dieses Objekt an a übergebenformat()
. Der@property
Dekorateur bewirkt, dass das__repr__
Objekt in eine Zeichenfolge umgewandelt wird, was dann dazu führt, dass dasstr
Objekt kein aufrufbarer Fehler ist.quelle
__repr__
)@property
auf a__str__()
Wenn dies passiert, geben Sie einfach Folgendes aus (es wurde auch oben veröffentlicht)
>>> del str
Das sollte es beheben.
quelle
Überprüfen Sie Ihre Eingabeparameter und stellen Sie sicher, dass Sie keinen Namen haben
type
. Wenn ja, dann haben Sie einen Konflikt und erhalten diesen Fehler.quelle
str = 'Hello World String' print(str(10)+' Good day!!')
Sogar ich hatte Probleme mit dem obigen Code, da wir die Funktion str () beschatten.
Lösung ist:
string1 = 'Hello World String' print(str(10)+' Good day!!')
quelle
Ein Problem, das ich gerade hatte, war das versehentliche Aufrufen einer Zeichenfolge
"Foo" ("Bar" if bar else "Baz")
Sie können Zeichenfolgen verketten, indem Sie sie einfach so nebeneinander platzieren
"Foo" "Bar"
Aufgrund der offenen Klammer im ersten Beispiel dachte ich jedoch, ich würde versuchen anzurufen
"Foo"
quelle
Es könnte auch sein, dass Sie versuchen, falsch zu indizieren:
a = 'apple' a(3) ===> 'str' object is not callable a[3] = l
quelle
Ich hatte noch ein Problem mit dem gleichen Fehler!
Es stellte sich heraus, dass ich eine Eigenschaft für ein Modell erstellt hatte, diese Eigenschaft aber dumm in Klammern aufrief.
Hoffe das hilft jemandem!
quelle
Ich hatte den gleichen Fehler. In meinem Fall lag das nicht an einer Variablen namens str. Aber weil ich eine Funktion mit einem str-Parameter und der Variablen gleich benannt habe.
Ich führe es in einer Schleife aus. Das erste Mal läuft es in Ordnung. Das zweite Mal habe ich diesen Fehler bekommen. Das Umbenennen der Variablen in einen anderen Namen als den Funktionsnamen hat dies behoben. Ich denke, das liegt daran, dass Python einmal einen Funktionsnamen in einem Bereich zugeordnet hat und beim zweiten Mal versucht, den linken Teil (same_name =) als Aufruf der Funktion zuzuordnen, und feststellt, dass der str-Parameter nicht vorhanden ist. dann wirft es diesen Fehler.
quelle
Ich habe diese Warnung von einer unvollständigen Methodenprüfung erhalten:
if hasattr(w, 'to_json'): return w.to_json() ######### warning, 'str' object is not callable
Es wurde angenommen, dass
w.to_json
es sich um eine Zeichenfolge handelte. Die Lösung bestand darin, einencallable()
Scheck hinzuzufügen :if hasattr(w, 'to_json') and callable(w.to_json):
Dann ging die Warnung weg.
quelle
Es wird empfohlen,
str
int
list
etc .. nicht als Variablennamen zu verwenden, obwohl Python dies zulässt. Dies liegt daran, dass beim Versuch, auf reservierte Schlüsselwörter mit demselben Namen zuzugreifen, solche Unfälle auftreten könnenquelle
In meinem Fall hatte ich eine Klasse mit einer Methode. Die Methode hatte nicht 'self' als ersten Parameter und der Fehler wurde ausgelöst, als ich die Methode aufrief. Nachdem ich der Parameterliste der Methode 'self' hinzugefügt hatte, war dies in Ordnung.
quelle