TypeError: объект 'str' не вызывается (Python) - PullRequest
55 голосов
/ 18 мая 2011

Код:

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') работает, а затем во второй раз появляется ошибка:

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

Кто-нибудь знает, почему это так?

@ Грег Хьюгилл:

Я уже пробовал это, и я получаю ошибку:

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

Ответы [ 12 ]

102 голосов
/ 18 февраля 2013

Хотя этого нет в вашем коде, другая труднодоступная ошибка - это когда символ % отсутствует при попытке форматирования строки:

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

но должно быть:

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

Отсутствие % приведет к тому же TypeError: 'str' object is not callable.

97 голосов
/ 18 мая 2011

Это проблема:

global str

str = str(mar)

Вы переопределяете, что означает str(). str - это встроенное имя Python типа string, и вы не хотите его менять.

Используйте другое имя для локальной переменной и удалите оператор global.

21 голосов
/ 18 июля 2015

В моем случае у меня был класс, у которого был метод и строковое свойство с тем же именем, я пытался вызвать метод, но получал строковое свойство.

8 голосов
/ 05 сентября 2017

Вы можете получить эту ошибку, если у вас есть переменная str и вы пытаетесь вызвать str() функцию.

7 голосов
/ 14 января 2016

Другой случай этого: использование функции __repr__ объекта, при котором вызов format() не прозрачен.

В нашем случае мы использовали @property декоратор на __repr__ и передали этот объект format(). Декоратор @property вызывает превращение объекта __repr__ в строку, что приводит к тому, что объект str не вызывается как ошибка.

6 голосов
/ 07 октября 2018

Важно отметить (в случае, если вы пришли сюда от Google), что "TypeError: объект 'str' не может быть вызван " означает, что только попытка переменной, которая была объявлена ​​как String-type ранее для использования в качестве функции (например, путем добавления парантезов в конце).

Вы можете получить точно такое же сообщение об ошибке, если в качестве имени переменной вы используете любой другой встроенный метод.

3 голосов
/ 04 июня 2018

Проверьте ваши входные параметры и убедитесь, что у вас нет параметра с именем type. Если это так, то у вас возникнет конфликт и вы получите эту ошибку.

1 голос
/ 09 марта 2018

может быть, вы также пытаетесь неправильно индексировать:

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

a[3] = l
1 голос
/ 27 февраля 2018

Проблема, с которой я только что столкнулся, была случайным вызовом строки

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

Вы можете объединить строки, просто поместив их рядом друг с другом, как это

"Foo" "Bar"

однако из-за открытой скобки в первом примере мне показалось, что я пытаюсь позвонить "Foo"

1 голос
/ 27 июня 2016

У меня была такая же ошибка. В моем случае не из-за переменной с именем str. Но потому что я назвал функцию с параметром str и переменной, то же самое.

same_name = same_name( var_name: str)

Я запускаю это в цикле. В первый раз все работает нормально. Во второй раз я получил эту ошибку. Переименование переменной в имя, отличное от имени функции, исправило это. Так что я думаю, это потому, что Python однажды связывает имя функции в области видимости, второй раз пытается связать левую часть (same_name =) как вызов функции и обнаруживает, что параметр str отсутствует, поэтому он отсутствует, затем выдает эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...