Python TypeError: 'function' object is not subscriptable错误含义及代码问题排查求助
解答:TypeError: 'function' object is not subscriptable
首先,先明确这个错误的含义:
当你尝试对一个函数对象使用下标语法(比如
[-2])时就会触发这个错误,因为函数本身不是可下标访问的类型——只有列表、字符串、元组这类序列/容器对象才能用[]来取值。
问题的直接原因
看你出错的代码行:
row = random.choice(get_the_valid_locations[-2])
这里的get_the_valid_locations是你定义的函数本身,你没有调用它(也就是没有加()并传入board参数),所以Python把它当成了函数对象,而不是函数执行后返回的valid_locations列表。你需要先调用函数获取返回的列表,再对列表取下标,正确的写法应该是:
row = random.choice(get_the_valid_locations(board)[-2])
额外的潜在问题
另外,我注意到你的get_the_valid_locations函数里有个逻辑问题:
valid_locations.extend([row, col])
extend会把列表里的每个元素单独添加到valid_locations中,比如一个有效位置(row=1, col=2)会被拆成1和2两个元素加入列表。这样最终的valid_locations是一个扁平的列表,比如[1,2,3,4,...],此时[-2]取到的是单个整数,而random.choice()需要传入一个非空的序列(比如列表),传入单个整数会触发新的错误。
如果你想存储的是坐标对,应该用append而不是extend:
valid_locations.append([row, col]) # 或者 append((row, col)) 使用元组存储坐标
这样valid_locations会是[[1,2], [3,4], ...]的结构,后续操作坐标会更合理。
内容的提问来源于stack exchange,提问作者Cowcake
相关产品推荐
相关产品推荐

