类型错误:“类型”对象未在列表索引标化
问题描述:
为什么此代码的工作抛错误“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()
答
问题就在这里:
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
基本上它是一个坏习惯打电话给你的变量与内部数据类型或名称包,因为这通常会导致这种错误并导致混淆。
_“我没有索引或调用任何类型/对象。”_你是什么意思?您在对象上使用方括号,例如索引,并且你正在使用'list',这是一种类型。 – Kevin
您的列表可能被命名为'list' * outside *函数(这是一个糟糕的主意,因为您正在隐藏内置类型),但* inside *函数需要参数名称'userlst'。你也不应该直接调用'__magic_methods__' - 'thing .__ len __()'应该是'len(thing)'。 – jonrsharpe
在'main()'中,你重新定义了内建的'list'类型是一个(局部)变量,所以在这里使用它。但是'find_linear_quadratic()'不是这种情况。 – martineau