2016-09-22 8 views
0

値が別のリストの前に来るかどうかチェックしたい。私はこの質問をしばらく前に聞いた:TypeError: 'GitHubIterator' object does not support indexing、私はリストの最後のコメントにアクセスすることができます。私はこれを拡大して、プルリクエスト内のすべてのコメントを調べて、コメントが#sign-off commentの後に来るかどうかをチェックします。私はprintステートメントを使用してコメントを印刷できますが、エラーメッセージで値の順序を調べるとエラーが発生します:AttributeError: 'IssueComment' object has no attribute 'index'リスト内で別の値の前に値が来るかどうかを調べる

イテレータがインデックス作成をサポートしていないため、何らかの理由でコメントの本文をリストに入れてから、インデックスを使用して順序を決定する必要があると思います。しかし、私はそれをうまく動作させるのに失敗しました。

hold_off_regex_search_string = re.compile(r"\B#hold-off\b", re.IGNORECASE) 
sign_off_regex_search_string = re.compile(r"\B#sign-off\b", re.IGNORECASE) 
for comments in list(GitAuth.repo.issue(prs.number).comments()): 
    print (comments.body) 
    if comments.index(hold_off_regex_search_string.search(comments.body)) > comments.index(sign_off_regex_search_string.search(comments.body)): 
     print('True') 
+0

条件に合致するre.search(r '#hold-off [\ w \ s] +#signoff'、comments.body) 'を実行できませんでしたか?私はコメントがカンマで区切られた単語であると仮定しています。 –

答えて

1

あなたが混乱しているようです。 forループはすでにコメントを順番に繰り返しています。 #hold-offパターンと#sign-offパターンの各コメントをテストし、最初に表示するパターンを報告するだけです。

hold_off_regex_search_string = re.compile(r"\B#hold-off\b", re.IGNORECASE) 
sign_off_regex_search_string = re.compile(r"\B#sign-off\b", re.IGNORECASE) 
special_comments = [] 
for comments in list(GitAuth.repo.issue(prs.number).comments()): 
    if hold_off_regex_search_string.search(comments.body): 
     special_comments.append('HOLD OFF') 
    elif sign_off_regex_search_string.search(comments.body): 
     special_comments.append('SIGN OFF') 
if special_comments == ['HOLD OFF', 'SIGN OFF']: 
    # add label 
elif special_comments == ['SIGN OFF', 'HOLD OFF']: 
    # remove label 
elif special_comments == ['HOLD OFF']: 
    # handle it 
elif special_comments == ['SIGN OFF']: 
    # handle it 
elif special_comments == []: 
    # handle it 
else: 
    # maybe multiple sign offs or hold offs? 
+0

私はこの解決策を考え出しましたが、これは、#hold-offと#sign-offの順序でラベルを追加したり削除したりするためのアクションを実行するために拡張されるため、どちらが最初に来るのかを知る必要があります。リスト内の'#hold-off'が'#sign-off'の後に来たら、ラベルを削除してください。 '#sign-off'が'#hold-off'の後に来たら、ラベルを追加してください。上記の例では、両方とも存在すれば、常に##hold-offを打ち破ります... – DBS

+1

2つの特別なコメントタイプが出現する順序を追跡する答えを編集しました。 –

関連する問題