2017-02-27 76 views
1

我想從字符串列表中提取每個字符串的第一個字母。我知道我可以使用抽象列表函數來做到這一點,但我想用結構遞歸來做到這一點。獲取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

回答

2

每一次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 
相關問題