2010-07-27 130 views
1

我不明白爲什麼,當我運行我的代碼爲每個循環下if語句不運行。即使發現的數量大於0!蟒蛇 - 爲一個if語句

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) 

任何幫助將不勝感激,我一直在我的頭上一個小時。

+0

是什麼讓你覺得'found'是一個數字? – 2010-07-27 20:37:33

+0

我確定發現是一個數字。 :) – myusuf3 2010-07-27 20:41:44

+0

什麼是getIterLength?你看到了什麼樣的價值? – JAL 2010-07-27 20:55:55

回答

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()方法,而不是finditer()給你一個列表(這是一個迭代,而不是迭代器),可在其上運行len(group)到獲取大小,然後用它在for循環中迭代。

1

檢查你的代碼格式,它看起來像下你有雙重標籤,而不是單一的標籤,記住蟒蛇大約壓痕非常挑剔

+0

我修復了標籤。但仍然沒有mas。 – myusuf3 2010-07-27 20:41:14

+0

它實際上並不關心你是否在一個塊中使用雙標籤,而在另一個塊中使用單標籤。只要縮減級別在塊的中間沒有意外變化,就很好。 – James 2010-07-27 20:56:43

+0

解釋器可能無關緊要,但python *程序員*對於縮進非常挑剔。 – bstpierre 2010-07-27 23:10:57