TypeError: ‘str’ object kan niet worden aangeroepen (Python)

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'

De eerste Dict(z, 'w')werkt en dan komt de tweede keer met een fout:

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

Weet iemand waarom dit is?

@Greg Hewgill:

Ik heb dat al geprobeerd en ik krijg de foutmelding:

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

Antwoord 1, autoriteit 100%

Dit is het probleem:

global str
str = str(mar)

Je herdefinieert wat str()betekent. stris de ingebouwde Python-naam van het stringtype en u wilt deze niet wijzigen.

Gebruik een andere naam voor de lokale variabele en verwijder de global-instructie.


Antwoord 2, autoriteit 83%

Hoewel niet in uw code, is een andere moeilijk te herkennen fout wanneer het teken %ontbreekt bij een poging tot tekenreeksopmaak:

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

maar het zou moeten zijn:

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

Het ontbrekende %zou resulteren in hetzelfde TypeError: 'str' object is not callable.


Antwoord 3, autoriteit 18%

In mijn geval had ik een klasse met een methode en een string-eigenschap met dezelfde naam, ik probeerde de methode aan te roepen maar kreeg de eigenschap string.


Antwoord 4, autoriteit 14%

Het is belangrijk op te merken (voor het geval je hier door Google bent gekomen) dat ‘TypeError: ‘str’ object is not callable‘ alleen betekent dat een variabele die eerder als String-type is gedeclareerd, is geprobeerd om als functie te worden gebruikt (bijv. door aan het eind haakjes toe te voegen.)

U kunt exact dezelfde foutmelding krijgen als u een andere ingebouwde methode als variabelenaam gebruikt.


Antwoord 5, autoriteit 12%

Je kunt deze foutmelding krijgen als je variabele strhebt en de functie str()probeert aan te roepen.


Antwoord 6, autoriteit 6%

Een ander geval hiervan: knoeien met de functie __repr__van een object waarbij een format()-aanroep niet-transparant mislukt.

In ons geval gebruikten we een @property-decorateur op de __repr__en gaven dat object door aan een format(). De @property-decorator zorgt ervoor dat het __repr__-object wordt omgezet in een tekenreeks, wat er vervolgens toe leidt dat het str-object een niet-oproepbare fout is.


Antwoord 7, autoriteit 6%

Als dat gebeurt, geef dan gewoon het volgende uit (het werd ook hierboven gepost)

>>> del str

Dat zou het moeten oplossen.


Antwoord 8, autoriteit 3%

Controleer uw invoerparameters en zorg ervoor dat u er geen heeft met de naam type. Als dat zo is, krijg je een botsing en krijg je deze foutmelding.


Antwoord 9, autoriteit 3%

str = 'Hello World String'    
print(str(10)+' Good day!!')

Zelfs ik had dit probleem met de bovenstaande code terwijl we de functie str()schaduwen.

Oplossing is:

string1 = 'Hello World String'
print(str(10)+' Good day!!')

Antwoord 10, autoriteit 2%

Ik had dezelfde fout. In mijn geval was dat niet vanwege een variabele met de naam str. Maar omdat ik een functie heb genoemd met een str-parameter en de variabele hetzelfde.

same_name = same_name(var_name: str)

Ik voer het in een lus uit. De eerste keer ging het goed. De tweede keer kreeg ik deze foutmelding. Het hernoemen van de variabele naar een andere naam dan de functienaam loste dit op. Dus ik denk dat het komt omdat Python eenmaal een functienaam in een bereik associeert, de tweede keer probeert het linkerdeel (same_name =) te associëren als een aanroep van de functie en detecteert dat de strparameter is niet aanwezig, dus het ontbreekt, dan wordt die fout gegenereerd.


Antwoord 11

Een probleem dat ik net had, was het per ongeluk aanroepen van een string

"Foo" ("Bar" if bar else "Baz")

Je kunt strings samenvoegen door ze gewoon naast elkaar te plaatsen, zoals zo

"Foo" "Bar"

maar vanwege de open accolade in het eerste voorbeeld dacht het dat ik probeerde "Foo"

te noemen


Antwoord 12

het kan ook zijn dat u op de verkeerde manier probeert te indexeren:

a = 'apple'
a(3) ===> 'str' object is not callable
a[3] = l

Antwoord 13

Ik had nog een ander probleem met dezelfde fout!

Blijkbaar had ik een eigenschap op een model gemaakt, maar noemde ik die eigenschap zo dom tussen haakjes.

Ik hoop dat dit iemand helpt!


Antwoord 14

het wordt aanbevolen om strintlistenz. niet te gebruiken als variabelenamen, ook al staat python dit toe.
dit komt omdat het dergelijke ongelukken kan veroorzaken wanneer u probeert toegang te krijgen tot gereserveerde zoekwoorden met dezelfde naam


Antwoord 15

In mijn geval had ik een klasse met een methode erin. De methode had ‘self’ niet als de eerste parameter en de fout werd gegenereerd toen ik de methode aanriep. Toen ik ‘zelf’ eenmaal aan de parameterlijst van de methode had toegevoegd, was het in orde.


Antwoord 16

Ik kreeg deze waarschuwing van een onvolledige methodecontrole:

if hasattr(w, 'to_json'):
    return w.to_json()
             ######### warning, 'str' object is not callable

Er werd aangenomen dat w.to_jsoneen string was. De oplossing was om een ​​callable()check toe te voegen:

if hasattr(w, 'to_json') and callable(w.to_json):

Toen ging de waarschuwing weg.


Antwoord 17

FWIW Ik heb dit zojuist op een iets andere gebruikssituatie geslagen. Ik heb mijn code doorzocht en doorzocht op zoek naar waar ik een ‘str’-variabele had gebruikt, maar kon deze niet vinden. Ik begon te vermoeden dat een van de modules die ik heb geïmporteerd misschien de boosdoener was… maar helaas, het was een ontbrekend ‘%’-teken in een opgemaakte printopdracht.

Hier is een voorbeeld:

x=5
y=6
print("x as a string is: %s.  y as a string is: %s" (str(x) , str(y)) )

Dit resulteert in de uitvoer:

  TypeError: 'str' object is not callable

De correctie is:

x=5
y=6
print("x as a string is: %s.  y as a string is: %s" % (str(x) , str(y)) )

Resulterend in onze verwachte output:

x as a string is: 5. y as a string is: 6

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes