2017-08-03 118 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

基本上它是一个坏习惯打电话给你的变量与内部数据类型或名称包,因为这通常会导致这种错误并导致混淆。

相关问题