AttributeError (объект '' str 'не имеет атрибута' read '')

В Python я получаю сообщение об ошибке:

Exception: (<type 'exceptions.AttributeError'>, AttributeError("'str' object has no attribute 'read'",), <traceback object at 0x1543ab8>) 

Учитывая код python:

 def getEntries (self, sub): url = 'http://www.reddit.com/' if (sub != ''): url += 'r/' + sub request = urllib2.Request (url + '.json', None, {'User-Agent' : 'Reddit desktop client by /user/RobinJ1995/'}) response = urllib2.urlopen (request) jsonofabitch = response.read () return json.load (jsonofabitch)['data']['children'] 

Что означает эта ошибка и что я сделал, чтобы вызвать ее?

3 Solutions collect form web for “AttributeError (объект '' str 'не имеет атрибута' read '')”

Проблема в том, что для json.load вы должны передать файл как объект с функцией read . Поэтому либо вы используете json.load(reponse) либо json.loads(response.read()) .

 AttributeError("'str' object has no attribute 'read'",) 

Это означает, что именно это говорит: что-то пыталось найти атрибут .read для объекта, который вы ему дали, и вы дали ему объект типа str (т. .read Вы дали ему строку).

Ошибка произошла здесь:

 json.load (jsonofabitch)['data']['children'] 

Ну, вы не ищете нигде, так что это должно произойти в функции json.load которую вы вызвали (как указано полной трассировкой). Это потому, что json.load пытается. .read то, что вы ему дали, но вы дали ему jsonofabitch , который в настоящее время называет строку (которую вы создали, вызвав .read на response ).

Решение: не вызывайте .read себя; функция будет делать это и ожидает, что вы дадите ему response напрямую, чтобы он мог это сделать.

Вы также могли бы это понять, прочитав встроенную документацию Python для функции (попробуйте help(json.load) или весь модуль (попробуйте help(json) ) или проверите документацию для этих функций на http : //docs.python.org .

Если вы получите ошибку python следующим образом:

 AttributeError: 'str' object has no attribute 'some_method' 

Вероятно, вы случайно отравили свой объект, перезаписав свой объект строкой.

Как воспроизвести эту ошибку в python с несколькими строками кода:

 #!/usr/bin/env python import json def foobar(json): msg = json.loads(json) foobar('{"batman": "yes"}') 

Запустите его, который печатает:

 AttributeError: 'str' object has no attribute 'loads' 

Но измените имя variablename, и он отлично работает:

 #!/usr/bin/env python import json def foobar(jsonstring): msg = json.loads(jsonstring) foobar('{"batman": "yes"}') 

Эта ошибка возникает, когда вы пытались запустить метод внутри строки. Строка имеет несколько методов, но не тот, который вы вызываете. Поэтому перестаньте пытаться вызвать метод, который String не определяет, и начать искать, где вы отравили свой объект.

  • Может ли python urllib2 автоматически распаковывать данные gzip с веб-страницы?
  • Обработка rss-перенаправлений с помощью Python / urllib2
  • urllib2.urlopen будет висеть навсегда, несмотря на таймаут
  • Отправка данных с использованием POST в Python для PHP
  • Python urllib2 с продолжением
  • Размер файла python urllib2
  • urllib2 читается в Unicode
  • 302s и потерять файлы cookie с urllib2
  •  
    Interesting Posts for Van-Lav

    Почему дескриптор не получает вызов, если он определяется как атрибут экземпляра?

    Как прогнозировать метки флоат-вектора с помощью кофе?

    Каков наилучший интерфейс от Python 3.1.1 до R?

    cursor.rowcount всегда -1 в sqlite3 в python3k

    Прервать выполнение модуля в Python

    zc.lockfile.LockError в ZODB

    Как преобразовать мой базовый код TensorFlow на основе подачи, чтобы использовать «Набор данных»?

    Проигрыватель Python для обработки в многопроцессорной обработке

    PyCharm не может найти правильные пути, если я открою каталог, который не является корнем Django

    «Возврат» только в функции Возврат одного значения

    Просмотр всех определенных переменных

    Python raw_input игнорирует новую строку

    Существует ли эквивалент Python для модификатора Perl «/ x» для регулярных выражений?

    Является ли менее вычислительно интенсивным использование 7.0 или float (7) в Python?

    Индекс списка вне диапазона при доступе к строке, считываемой из файла CSV

    Python - лучший язык программирования в мире.