当“无”在函数中没有返回时,为什么python在NoneType上失败?

时间:2017-01-05 19:31:32

标签: python python-3.x

我正在尝试从filteredKeys()函数创建一个键列表,但是当我调用该函数时,我得到一个TypeError:'NoneType'对象不可迭代。

当我打印filteredKeys()的结果但是当我将它转换为列表时,

'无'不存在。我错过了什么?这让我发疯了!

        key_list = []
        for line in stdout.read().splitlines():
            input_line = line
            input_line = input_line.replace(b'[sudo] password for ufitadmin: ', b'')
            key_individual = str(input_line, 'utf-8')
            key_individual = key_individual.replace(
                'cat: /home/%s/.ssh/authorized_keys: No such file or directory' % user,
                'No key exists for this user.')
            key_list.append(key_individual)


        global keyDict
        keyDict = {}
        keyDict[host] = key_list
        filterString = "No key exists for this user."
        filteredKeylist = []

        def filteredKeys():
            for key,value in keyDict.items():
               for values in value:
                   if values == filterString:
                       return key



        filteredKeylist = list(filteredKeys())

        print(filteredKeylist)

1 个答案:

答案 0 :(得分:1)

您的filteredKeys()函数实际上很可能会返回None - 当所有值都不匹配filterString时。

此外,您声明要“从filteredKeys()函数创建一个键列表”,但由于它返回单个值(None或第一个键值匹配{{1}它只是你想要的WontWork。

更好的实现方法是使其成为生成器:

filterString

但这仍然是一种无用的复杂写作方式:

def filteredKeys():
    for key,values in keyDict.items():
       if filterString in values:
           yield key

filteredKeylist = list(filteredKeys())

同样在全球范围内,您的代码看起来过于复杂,我已经发现了一个明显的错误,每次迭代时都会覆盖keyDict。