Python | Attribute Error: 'Nonetype' object has no attribute '__getitem__'

背景

寫一個計算中位數的方法,相關的代碼是:

new_list=list.sort()
if len(list)%2==1:
  return new_list[(len(list)-1)/2]

返回錯誤:

'Nonetype' object has no attribute '__getitem__'

問題

Nonetype的錯誤說明,我們在某對象上試圖使用一個方法或訪問一個屬性,但這個對象爲空。
在上面的例子裏,我希望通過第一行代碼完成sort list並把sorted list存在new_list中。然後,如果list的長度爲奇數,返回new_list的中間值。
然而,查詢Tutorialspoint對於python sort()的解釋可知,python中的sort方法不會返回任何值,只會改變原有的list。因此,在第三行代碼試圖access new_list的時候,new_list的值爲None。

解決

解決方法也很簡單——既然sort()直接對原list做修改,那麼就不用再declare new_list了:

list.sort()
if len(list)%2==1:
  return list[(len(list)-1)/2]

當然,如果不希望修改原list,也可以先把原list拷貝一份,然後在備份上做修改:

new_list=list.copy()
new_list.sort()
if len(new_list)%2==1:
  return new_list[(len(new_list)-1)/2]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章