2016-07-27 5 views
0

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

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, так как она относится к одному элементу) будет оставаться связанной с последним значением из итератора после окончания цикла. Это то, что вы хотите выполнить.

Смежные вопросы