【问题标题】:Function returning None - from list返回 None 的函数 - 从列表中
【发布时间】:2014-10-15 10:30:14
【问题描述】:

我有以下功能:

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

打印一个元组列表,然后输入 = List

这个函数被调用

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

但现在打印 None,即 matchList 从第一个函数中的 List 转换为 None!

我只是不明白这里发生了什么

任何帮助将不胜感激

【问题讨论】:

  • 在 createMatchTuples(partList, testbench) 中,你不应该return createMatchTuples(partList, testbench)吗?

标签: python list nonetype


【解决方案1】:

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

【讨论】:

  • 对!所以即使 createListofParts 正在调用 createMatchTuples ,它返回的东西总是没有?!那么将这两个函数结合起来还是调用两次会更好吗?即第一个返回零件列表和第二个重新调整匹配列表?谢谢
  • 只需在createListofParts添加return语句即可。
  • 完成了!非常感谢你们!我喜欢 StackOverflow 社区的响应速度。
  • @T1M : createMatchTuples 将 matchList 对象返回给 createListofParts,但 createListofParts 不保存或返回它,因此 matchList 对象被 Python 垃圾收集器清理。
【解决方案2】:

那是因为createListofParts 没有return 语句,而在python 中,默认情况下,如果没有return 语句,则函数返回None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多