TypeError: объект GitHubIterator не поддерживает индексирование

Используя github3.py, я хочу получить последний комментарий в списке комментариев, связанных с запросом извлечения, а затем найти в нем строку. Я попробовал код ниже, но я получаю ошибку TypeError: 'GitHubIterator' object does not support indexing (без индексации я могу получить список комментариев).

for comments in list(GitAuth.repo.issue(prs.number).comments()[-1]):
    if sign_off_regex_search_string.search(comments.body) and comments.user.login == githubID:
        sign_off_by_author_search_string_found = 'True'
        break

1 ответ

Решение

Я уверен, что первая строка вашего кода не делает то, что вы хотите. Вы пытаетесь индексировать (с [-1]) объект, который не поддерживает индексацию (это своего рода итератор). Вы также включили вызов списка, и в этом списке выполняется цикл. Я думаю, что вам не нужна петля. Пытаться:

comments = list(GitAuth.repo.issue(prs.number).comments())[-1]

Я переместил закрывающую скобку из list позвонить, чтобы прийти до индексации. Это означает, что индексация происходит в списке, а не в итераторе. Однако это тратит немного памяти, так как все комментарии сохраняются в списке, прежде чем мы проиндексируем последний и выбросим список. Если использование памяти является проблемой, вы можете вернуть цикл и избавиться от list вызов:

for comments in GitAuth.repo.issue(prs.number).comments():
    pass # the purpose of this loop is to get the last `comments` value

Остальная часть кода не должна быть внутри этого цикла. Переменная цикла comments (что, вероятно, должно быть comment, поскольку он ссылается на один элемент), он останется связанным с последним значением из итератора после окончания цикла. Это то, что вы хотите сделать поиск.

Другие вопросы по тегам