Python dict keyerror в операторе while (работает .get ()) - PullRequest
1 голос
/ 06 мая 2020

В классе у меня есть вложенный dict

tree = {"left":tree_left,"right":tree_right,"class":class,"split":split}

, где tree_left,tree_right также словари в той же форме.

Если я напишу

 tree = self.tree
 while tree["split"]:
          do stuff

он выдает KeyError: "split", но пишет

 tree = self.tree
 while tree.get("split"):
          do stuff

, он работает. Кроме того, я пробовал

 tree = self.tree
 print(tree["split"])
 while tree["split"]:
          do stuff

, который печатает правильное значение, а затем выдает ошибку.

По какой-либо причине?

1 Ответ

2 голосов
/ 06 мая 2020

Когда tree не имеет ключа split , tree["split"] вызовет исключение KeyError, а tree.get("split") вернет None, и код выйдет из while l oop без каких-либо исключений (условие l oop будет логически False).

Другой способ проверить, существует ли split в вашей переменной tree будет:

while "split" in tree:
    # do stuff
...