为什么此代码会抛出错误“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 :(得分: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'对象不可订阅
基本上,使用内部数据类型或包的名称调用变量是不好的习惯,因为这通常会导致此类错误并导致混淆。