1

コードを実行すると、if ステートメントの下の for each ループが実行されない理由がわかりません。見つかった数が 0 より大きい場合でも!

def findpattern(commit_msg):
    pattern = re.compile("\w\w*-\d\d*")
    group = pattern.finditer(commit_msg)
    found = getIterLength(group)
    print found
    if found > 0:
        issues = 0
        for match in group:
                print " print matched issues:"
                auth = soap.login(jirauser,passwd)

                print match.group(0)
                getIssue(auth,match.group(0))
                issues = issues + 1
    else: 
        sys.exit("No issue patterns found.")

print "Retrieved issues: " + str(issues)  

何か助けていただければ幸いです。私はこれに1時間頭を悩ませてきました。

4

2 に答える 2

8

あなたのgetIterLength()関数は、によって返された反復子を使い果たすことによって長さを見つけていますfinditer()。次に、for ループ用の新しい反復子インスタンスが必要になります。代わりに、次のようにコードを再構築します。

def findpattern(commit_msg):
    pattern = re.compile("\w\w*-\d\d*")
    group = pattern.finditer(commit_msg)

    found = 0
    issues = 0
    for match in group:
        print " print matched issues:"
        auth = soap.login(jirauser,passwd)

        print match.group(0)
        getIssue(auth,match.group(0))
        issues = issues + 1
        found += 1
    if found == 0:
        sys.exit("No issue patterns found.")


    print "Retrieved issues: " + str(issues)  

または、このfindall()メソッドを使用して、実行してサイズを取得し、それを使用して for ループで反復処理finditer()できるリスト (イテレータではなく反復可能オブジェクト) を提供することもできます。len(group)

于 2010-07-27T20:48:40.340 に答える
1

コードのフォーマットを確認してください。シングルタブではなくダブルタブがあります。Pythonはインデントに非常に注意が必要です。

于 2010-07-27T20:34:41.537 に答える