2016-05-09 10 views
0

Я работаю с Eventbrite api для поиска некоторых событий, но в какой-то момент я пытаюсь получить некоторые атрибуты вне ответа, используя json.load(), но получая это при попытке распечатать event_load.AttributeError: объект «EventbriteObject» не имеет атрибута «read»

Traceback (most recent call last): 
    File "/Users/jo/PycharmProjects/api-eventbrite/api-eventbrite.py", line 21, in <module> 
    events_load = json.load(events) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/__init__.py", line 265, in load 
    return loads(fp.read(), 
AttributeError: 'EventbriteObject' object has no attribute 'read' 

При печати events_dump я прекрасно вижу полную структуру ответа json.

Я думаю, что я натыкаюсь на некоторые внутренние элементы python, которые им не известны как новичок. Может кто-то указать мне хорошее объяснение этой ошибки. Как я могу понять, какие атрибуты и методы есть у определенного объекта?

под кодом

from eventbrite import Eventbrite 

eventbrite = Eventbrite(my_auth_token) 

events = eventbrite.get('/events/search/?q=lisboa&categories=102') 

# events_dump = json.dumps(events, indent=4) 
# print(events_dump) 

events_load = json.load(events) 
print(events_load) 
+0

вы забыли включить ошибку .. – thebjorn

+1

Если вы можете конвертировать 'events' в формате JSON, это означает, что * это уже структуру данных Python *, и вам не нужно использовать 'json.load'. Действительно, зачем API Python возвращать то, что вам нужно для дальнейшей обработки? – kindall

ответ

2

How can i understand what are the attributes and methods a certain object has ?

Место print(dir(eventbrite)) и вы увидите все функции и переменные в Eventbrite OBJ. Тем не менее, я подозреваю, что вас это не волнует, и вы хотите увидеть ключ/значения извлеченных событий. Вы можете сделать что-то вроде:

from eventbrite import Eventbrite 

eventbrite = Eventbrite(my_auth_token) 
events = eventbrite.get('/events/search/?q=lisboa&categories=102') 
for key, val in events.items(): 
    print('{0}:\t{1}'.format(key,val)) 

Есть более elagant способов сделать это как pprint, но я дам вам понять это (я предоставил ссылку). Кроме того, я бы посоветовал вам начать изучать, как использовать отладчик Python pdb, чтобы помочь вам настроить точки останова и просмотреть значения. Надеюсь, это поможет.

Ссылки
+0

Спасибо, это были хорошие материалы - также этот ниже текст дал мне разрешение - https://www.youtube.com/watch?v=Uhm4OlQW7lw –

+0

Также pdb приятно - хотя im полагался на pycharm debbuger(), но все же иногда немного путают с объемом данных, которые он дает, не всегда я понимаю информацию из отладчика, наверняка она придет со временем :-) –

1

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

events_load = json.load(events) 

и ошибка говорит, что события является объект (json.load() принимает файл в качестве аргумента, поэтому в сообщении об ошибке говорится, что он не имеет метода .read()).

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

print(json.dumps(events, indent=4)) 

распечатать это красиво отформатировано.