你好,我最近刚开始使用python。我在这段代码中遇到了很多麻烦,当我尝试从集合中删除一个元素时,这给我带来了一个关键错误:
tiles.remove(m) KeyError:“ B9”
编辑:我忘记了每次我在for循环之前调用另一个函数时m值都会改变。同样在fc函数中,如果为false,则该函数确保将磁贴重新添加回设置的tile.add(m)
在线研究表明,仅当元素不在集合中时才发生键盘错误,但是...在删除元素之前,我检查了它是否在集合中,并且确实存在。
m = findMRV()
if checkEmpty(board, m) == False:
backtrack(board)
for d in domain[m].copy():
if checkValid(board, m[0], m[1], d ):
if m in tiles:
print(str(m)+"HELLO3")
tiles.remove(m)
board[m] = d
if(fc(board, m[0], m1], d) == False):
continue
checkValid函数仅返回true或false,并且不更改m。我希望将m从仅包含空图块的集合中删除,但我一直收到键盘错误,而且似乎无法弄清楚问题的根源或其他原因。
答案 0 :(得分:2)
您有一个循环
for d in domain[m].copy():
您要在每次迭代中tiles.remove(m)
的位置。在第一次迭代中将其删除后,该词典将不再具有密钥,并且在后续迭代中您将遇到密钥错误。
答案 1 :(得分:1)
“ if”语句中必须包含“ remove”语句,否则永远不会阻止。