获取NoneType在应该返回字符串的函数中出错?

时间:2017-02-27 00:10:57

标签: python python-3.x recursion 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 个答案:

答案 0 :(得分:2)

每次acronym()调用自己时,除了列表中的第一个字符串外,它都会调用los[1:]

最后,当你只是列表中的一个字符串时,“除了第一个字符串之外的所有字符串”都不是字符串,所以在下一次调用acronym()内,los是一个空列表,您的if los != []:测试失败。

由于在这种情况下你没有显式返回任何内容,Python会隐式返回None,这不能与你构建的字符串连接:

>>> "Hhay" + None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'NoneType' object to str implicitly