2014-10-15 2 views
0

У меня есть следующие функции:Функция не возвращаются None - из списка

def createListofParts(testbenchParts, testbench, ttype): 
    partList = [] 
    for part in ttype: 
     for root, subFolders, files in os.walk(os.path.join(testbenchParts, part)): 
      for file in files: 
       if file.endswith('.svn-base'): 
        pass 
       elif file.endswith('all-wcprops'): 
        pass 
       elif file.endswith('entries'): 
        pass 
       else: 
        partList.append(os.path.join(root, file)) 
    createMatchTuples(partList, testbench) 

def createMatchTuples(partList, testbench): 
    XMLlist = glob.glob(os.path.join(testbench, 'Scripts', "*.xml")) 
    matchList = [] 
    for part in partList: 
     matches = 0 
     for xmlFile in XMLlist: 
      xml = open(xmlFile, 'r') 
      t = re.findall('/' + os.path.split(part)[1], xml.read().replace('\\','/')) 
      matches = matches + len(t) 
      xml.close() 
     matchList.append((os.path.split(part)[1], matches)) 
    print matchList 
    print type(matchList) 
    return matchList 

который печатает список кортежей, а затем ввести = Список

Эта функция называется

matchList = functions.createListofParts(testbenchParts, testbench, ttype) 
print matchList 
print type(matchList) 

но теперь prints None, то есть matchList преобразуется из списка в 1-й функции в None!

Я просто не понимаю, что происходит здесь

Любая помощь будет оценена

+5

В createMatchTuples (partList, testbench) вы не должны возвращать createMatchTuples (partList, testbench) '? – fredtantini

ответ

2

createListofParts не имеет возврата, так как все функции, которые не имеют возвращаемого значения, он возвращает None по умолчанию, так matchList = functions.createListofParts(testbenchParts, testbench, ttype) наборы matchList в None, Вам необходимо return createMatchTuples:

def createListofParts(testbenchParts, testbench, ttype): 
    partList = [] 
    for part in ttype: 
     for root, subFolders, files in os.walk(os.path.join(testbenchParts, part)): 
      for file in files: 
       if file.endswith('.svn-base'): 
        pass 
       elif file.endswith('all-wcprops'): 
        pass 
       elif file.endswith('entries'): 
        pass 
       else: 
        partList.append(os.path.join(root, file)) 
    return createMatchTuples(partList, testbench) # <- return 
+0

Правильно! так что даже если createListofParts вызывает createMatchTuples, который возвращает что-то, он ВСЕГДА не будет ?! Так лучше ли было бы объединить две функции или вызвать их дважды? т.е. первый возвращающий список частей и 2-й, перенастраивающий matchList? Спасибо – T1M

+0

Просто добавьте оператор return в 'createListofParts'. – boh

+0

просто добавьте возврат, как у меня в коде –

2

Ну это потому, что createListofParts не имеет возврата выписку d в python, по умолчанию, если нет оператора возврата, функция возвращает None.

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