Python ';元组';不可调用错误

Python ';元组';不可调用错误,python,tuples,typeerror,Python,Tuples,Typeerror,我现在知道这个问题已经被问了好几次了。然而,答案似乎并不能解决我的问题。 我得到一个类型错误,“tuple”对象不可调用。即使列表中的元组以正确的方式用逗号分隔,我也会得到这样的结果: def aiMove(b): movesList = moves(b, -1) heuristic = [] if movesList: for m in movesList: bt = copy.deepcopy(b) pr

我现在知道这个问题已经被问了好几次了。然而,答案似乎并不能解决我的问题。 我得到一个类型错误,“tuple”对象不可调用。即使列表中的元组以正确的方式用逗号分隔,我也会得到这样的结果:

def aiMove(b):
    movesList = moves(b, -1)
    heuristic = []
    if movesList:
        for m in movesList:
            bt = copy.deepcopy(b)
            print("bt: ", bt)
            bt[m[0]][m[1]] = -1         
            h = heat[m[0]][m[1]]
            for move in m[2]:
                i=1;
                try:
                    while (-1* bt[m[0] + i*move[0]][m[1] + i*move[1]] < 0):
                        bt[m[0] + i*move[0]][m[1] + i*move[1]] *= -1    
                        bt[m[0] + i*move[0]][m[1] + i*move[1]] += -1    
                        i += 1;
                except IndexError:
                    continue

            alpha = max(float('-inf'), alphabeta(bt, depth-1, h, float('-inf'), float('inf'), 1))
            heuristic.append(alpha)
            if (float('inf') <= alpha):
                break
            selectedMove = movesList[int(heuristic.index(max(heuristic)))]
            move(b, selectedMove, -1)
    else:
        print ("The AI can't move!")
            return []

在这行中,您说您将使用名称
move
来引用
m[2]
的元素:

for move in m[2]:
但随后,您尝试调用已调用的函数
move

move(b, selectedMove, -1)
一旦您看到这一点,错误消息就完全有意义了:

TypeError: 'tuple' object is not callable
因为名称
move
不再引用函数,而是指向循环中绑定到的最后一个元组

修复此特定错误(如果还想使用变量名引用函数,请不要使用变量名
move
)更重要的是识别解释器如何准确地告诉您问题所在


它说元组是不可调用的;在它抱怨的代码行中,您正在调用
move
;因此
move
是一个元组,下一步应该添加
print(move)
(或者
print(type(move),repr(move))
,看看它实际上是什么元组。

本质上这意味着元组不是一个函数。您可能正在调用
selectedMove
函数中的某个位置,如
selectedMove(args)
。在没有看到您的完整回溯的情况下,我们正在黑暗中拍摄,但这种错误的一个常见来源是重新指定内置函数(如
max
)的名称,以引用函数以外的内容(在本例中为元组)。我会检查您的代码,以确保您从未执行过类似于
max=(0,1)
或类似的操作。
TypeError: 'tuple' object is not callable