2017-08-03 119 views
-1

爲什麼此代碼的工作拋錯誤「if list[(userlstlen-1)] < list[(userlstlen-2)]: TypeError: 'type' object is not subscriptable類型錯誤:「類型」對象未在列表索引標化

我不是索引或致電這裏任何類型/對象。

def find_linear_quadratic(userlst, userlstlen): 
    while userlstlen != 0: 
     print("iteration: \n", userlstlen) 
     # Start body here 
     if list[(userlstlen-1)] < list[(userlstlen-2)]: 
      A = list[(userlstlen-1)] 
      list[(userlstlen-1)] = list[(userlstlen-2)] 
      list[(userlstlen-1)] = A 
      userlstlen -= 1 
    return userlst 

def main(): 
    list = [3,2,1] 
    lstlen = list.__len__() 

    find_linear_quadratic(list, lstlen) 

main() 
+0

_「我沒有索引或調用任何類型/對象。」_你是什麼意思?您在對象上使用方括號,例如索引,並且你正在使用'list',這是一種類型。 – Kevin

+0

您的列表可能被命名爲'list' * outside *函數(這是一個糟糕的主意,因爲您正在隱藏內置類型),但* inside *函數需要參數名稱'userlst'。你也不應該直接調用'__magic_methods__' - 'thing .__ len __()'應該是'len(thing)'。 – jonrsharpe

+1

在'main()'中,你重新定義了內建的'list'類型是一個(局部)變量,所以在這裏使用它。但是'find_linear_quadratic()'不是這種情況。 – martineau

回答

1

問題就在這裏:

List是有效的Python數據類型,而你的影子在主要功能類型:

def main(): 
    list = [3,2,1] 
    lstlen = list.__len__() 

    find_linear_quadratic(list, lstlen) 

它仍然是當地的主要只和find_linear_quadratic不可見功能,因此當您試圖在find_linear_quadratic內尋址時,例如:

def find_linear_quadratic(userlst, userlstlen): 
    while userlstlen != 0: 
     print("iteration: \n", userlstlen) 
     # Start body here 
     if list[(userlstlen-1)] < list[(userlstlen-2)]: 
      A = list[(userlstlen-1)] 
      list[(userlstlen-1)] = list[(userlstlen-2)] 
      list[(userlstlen-1)] = A 
      userlstlen -= 1 
    return userlst 

list[(userlstlen-1)] < list[(userlstlen-2)]指Python數據類型,而不是你在主定義的變量,因此導致了錯誤信息:

TypeError: 'type' object is not subscriptable

基本上它是一個壞習慣打電話給你的變量與內部數據類型或名稱包,因爲這通常會導致這種錯誤並導致混淆。

相關問題