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