TypeError:'type'对象在列表索引上不可订阅

时间:2017-08-03 19:53:21

标签: python

为什么此代码会抛出错误“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()

1 个答案:

答案 0 :(得分:2)

问题在于:

List是有效的python数据类型,而在主函数中隐藏类型:

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

    find_linear_quadratic(list, lstlen)

它仅对于main是本地的而且对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数据类型而不是你在main中定义的变量,因此导致错误消息:

  

TypeError:'type'对象不可订阅

基本上,使用内部数据类型或包的名称调用变量是不好的习惯,因为这通常会导致此类错误并导致混淆。