Развёрнутое пояснение:
1. Создаётся словарь tags с ключами api и db.
2. Запускается цикл for key in tags, который получает итератор ключей словаря.
3. Итератор запоминает ожидаемое количество элементов на момент начала обхода.
4. При первом же ключе api условие срабатывает и вызывается tags.pop(key), удаляя элемент из словаря.
5. Словарь изменил размер во время итерации, поэтому при следующей попытке получить следующий ключ интерпретатор обнаруживает рассогласование и возбуждает RuntimeError: dictionary changed size during iteration.
6. print(tags) не выполняется, потому что исключение прерывает выполнение.
Почему это важно: такая ошибка часто возникает при фильтрации или очистке словарей состояния, кэша или метрик. Правильный способ — собрать ключи для удаления в отдельный список и удалять после цикла, либо создавать новый словарь через dict comprehension. Это позволяет избежать неожиданного падения на проде при обработке логов, конфигов или счётчиков.
Post #4853
371
Python: задачки и вопросы
- ✍ 1