2010-07-27 59 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