IndexError: список индекса вне диапазона в цикле - PullRequest
0 голосов
/ 21 декабря 2018

Я использую Python 3 / Tweepy для создания списка, который содержит имена пользователей, связанные с различными маркерами Twitter.

Мой код создает пустой словарь, перебирает маркеры в списке, чтобы получить имя пользователя, сохраняет эту информацию в словаре и затем добавляет словарь в новый список.

Яполучаю IndexError: list index out of range когда я запускаю код.Когда я удаляю 4-ю строку цикла for, я не получаю ошибок.Любые мысли о том, как я могу решить проблему?Почему эта строка кода вызывает ошибки?Спасибо!

Вот мой код:

def analyzer():
handles = ['@Nasdaq', '@Apple', '@Microsoft', '@amazon', '@Google', '@facebook', '@GileadSciences', '@intel']
data = []
# Grab twitter handles and append the name to data
for handle in handles:
    data_dict = {}
    tweets = api.user_timeline(handle)
    data_dict['Handle'] = handle
    data_dict['Name'] = tweets[0]['user']['name']
    data.append(data_dict)

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

ошибка происходит из-за пустого списка, к которому вы пытаетесь обратиться с индексом 0. Вы можете контролировать это, проверяя, пуст ли список или нет:

def analyzer():
handles = ['@Nasdaq', '@Apple', '@Microsoft', '@amazon', '@Google', '@facebook', '@GileadSciences', '@intel']
data = []
# Grab twitter handles and append the name to data
for handle in handles:
    data_dict = {}
    tweets = []
    tweets = api.user_timeline(handle)
    if tweets:
        data_dict['Handle'] = handle
        data_dict['Name'] = tweets[0]['user']['name']
        data.append(data_dict)
0 голосов
/ 21 декабря 2018

Я думаю, главная проблема в коде ниже

 tweets = api.user_timeline(handle)

api.user_timeline () может вернуть вам пустой список, и вы пытаетесь получить доступ к первому элементу из этого пустого списка.

 tweets[0]

вот почему вы получаете проблему «индекс вне диапазона».

вы можете изменить свой код примерно так -

for handle in handles:
    data_dict = {}
    tweets = api.user_timeline(handle)
    data_dict['Handle'] = handle
    if tweets:
        data_dict['Name'] = tweets[0]['user']['name']
    data.append(data_dict)
...