为什么当“None”在函数中不返回时python在NoneType上失败?

2024-10-02 14:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从filteredKeys()函数创建一个键列表,但是当我调用该函数时,我得到一个TypeError:“NoneType”对象不可编辑。在

当我打印filteredKeys()的结果但将其转换为列表时,“None”不存在。我错过了什么?我快疯了!在

        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)

Tags: key函数noin列表forinputline
1条回答
网友
1楼 · 发布于 2024-10-02 14:29:16

您的filteredKeys()函数实际上很可能返回None-当没有一个值与filterString匹配时。在

另外,您声明要“从filteredKeys()函数创建一个键列表”,但是由于它返回一个值(要么是None),要么是第一个值与filterString匹配的键),所以它的工作方式与您预期的一样。在

更好的实现方法是让它成为一个生成器:

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

filteredKeylist = list(filteredKeys())

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

^{pr2}$

同样,你的代码似乎过于复杂,我已经发现一个明显的错误,keyDict在每次迭代中都被覆盖。在

相关问题 更多 >