获取NoneType应该返回一个字符串的函数的错误?
问题描述:
我想从字符串列表中提取每个字符串的第一个字母。我知道我可以使用抽象列表函数来做到这一点,但我想用结构递归来做到这一点。获取NoneType应该返回一个字符串的函数的错误?
考虑下面的代码:
def acronym(los)
if los != []:
return los[0][0] + acronym(los[1:])
我得到以下错误:
builtins.TypeError: Can't convert 'NoneType' object to str implicitly
虽然我做了这个错误的SOF一些研究,我还是不明白,为什么这个功能应该返回None
,当los[0][0]
是一个字符串并且acronym(los[1:])
也返回一个字符串。
有什么建议吗?
答
每一次acronym()
都会调用它自己,它除了列表中的第一个字符串外,都会这样做:los[1:]
。
最终,当你到列表中只有一个字符串,“所有,但第一个”无弦可言,这样的acronym()
的下一个调用之内,los
是一个空列表,您的if los != []:
测试失败。
既然你不明确在这种情况下返回任何东西,巨蟒返回None
含蓄,不能与你建立起来的字符串连接在一起:
>>> "Hhay" + None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'NoneType' object to str implicitly
首先,解决您的压痕。其次,如果'los == []',你会返回什么? – user2357112
哦,我看到如果我添加其他:return“”,问题就解决了。你是否介意为什么简单地将“else”部分退出会产生错误?是因为函数的输出必须是NoneType或者是一个字符串(并且Python自动假定函数应该返回None)? – AlwaysLearning
如果一个函数没有显式地返回某个东西,它会自动返回'None'。 – user2357112