Развёрнутое пояснение:
1. defaults содержит исходные значения timeout и retries, а env изначально пуст.
2. ChainMap объединяет отображения для чтения, причём env имеет приоритет перед defaults.
3. Присваивание через config не ищет отображение, где ключ уже существует: значение retries записывается в первое отображение env.
4. Удаление через ChainMap также применяется только к первому отображению. Ключа timeout в env нет, поэтому возникает KeyError, хотя он доступен для чтения из defaults.
5. Обработчик перехватывает KeyError и печатает env с добавленным retries и неизменённый defaults, поэтому вывод равен {'retries': 5} {'timeout': 30, 'retries': 2}.
Почему это важно: задача проверяет модель записи и удаления в ChainMap. В многослойных конфигурациях чтение проходит по всем слоям, но изменения не переносятся автоматически в слой, где найдено исходное значение.
Post #4905
209
Python: задачки и вопросы
- ✍ 1