即使元素已在集合中,但删除集合中的元素时也会得到KeyError吗?

时间:2019-04-29 21:05:10

标签: python set keyerror

你好,我最近刚开始使用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从仅包含空图块的集合中删除,但我一直收到键盘错误,而且似乎无法弄清楚问题的根源或其他原因。

2 个答案:

答案 0 :(得分:2)

您有一个循环

for d in domain[m].copy():

您要在每次迭代中tiles.remove(m)的位置。在第一次迭代中将其删除后,该词典将不再具有密钥,并且在后续迭代中您将遇到密钥错误。

答案 1 :(得分:1)

“ if”语句中必须包含“ remove”语句,否则永远不会阻止。