获取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:])也返回一个字符串。

有什么建议吗?

+1

首先,解决您的压痕。其次,如果'los == []',你会返回什么? – user2357112

+0

哦,我看到如果我添加其他:return“”,问题就解决了。你是否介意为什么简单地将“else”部分退出会产生错误?是因为函数的输出必须是NoneType或者是一个字符串(并且Python自动假定函数应该返回None)? – AlwaysLearning

+0

如果一个函数没有显式地返回某个东西,它会自动返回'None'。 – user2357112

每一次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