Получение KeyError при удалении элемента в наборе, даже если элемент в наборе? - PullRequest
0 голосов
/ 30 апреля 2019

Здравствуйте, я начал использовать python довольно недавно.У меня так много проблем с этим одним сегментом моего кода, который выдает ошибку при попытке удалить элемент из моего набора:

tile.remove (m) KeyError: 'B9'

EDIT: я забыл упомянуть, что значение m меняется каждый раз, когда я вызываю другую функцию перед циклом for.Также в функции fc, если она ложна, функция гарантирует добавление плитки обратно в набор 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 ]

2 голосов
/ 30 апреля 2019

У вас есть петля

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

, где вы пытаетесь tiles.remove(m) в каждой итерации. После того, как он будет удален в первой итерации, в словаре больше не будет ключа, и вы получите ошибку в последующих итерациях.

1 голос
/ 30 апреля 2019

Оператор «remove» должен быть включен в оператор «if», иначе он никогда не будет предотвращен.

...