[英]Why does python fail on NoneType when “None” doesnt return in function?
我正在尝试从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)
你filteredKeys()
函数实际上很可能回到None
-当没有价值观的匹配filterString
。
另外,您声明要“从filteredKeys()函数创建键列表”,但是由于它返回单个值( None
或第一个键具有匹配filterString
的值),因此它只是WontWork即可。
更好的实现是使其成为生成器:
def filteredKeys():
for key,values in keyDict.items():
if filterString in values:
yield key
filteredKeylist = list(filteredKeys())
但这仍然是一种无用的复杂编写方式:
filteredKeylist = [key for key, values in keyDict.items() if filterString in values]
同样在全球范围内,您的代码似乎过于复杂,我已经发现一个显而易见的错误,每次迭代都会覆盖keyDict。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.