Привет!
У меня есть словарь со сложной структурой с кучей значений, из которого мне нужно полуить определенное значение «из глубины» или вернуть дефолтное значение. Если бы словарь был простым, я воспользовался бы .get(), но лепить его для каждого вложенного элемента мне не хочется. Плюс внутри словарей попадаются списки, есть функции для которых мне нужно получить значение (и они возвращают тоже подобные сложные структуры), ну и так далее. То есть выглядит это примерно так (упрощенно):
print(foo['bar']['baz'][1]['qwerty'][2].get_data())
Хочу задействовать функцию, внутри которой был бы простой try\except-блок, ну вроде
def f1(data, default=''):
try:
return data
except:
return default
Но никак не могу нагуглить как можно передать значение из примера выше не вычисляя его при подстановке. Ну например нет у меня ключа 'baz' в словаре, которой лежит в ключе 'bar' словаря 'foo', и я ожидаемо получаю ошибку при вызове своего f1. Пытался передавать как функцию, пытался использовать LazyProxy из objproxies, но успеха не добился.
Как можно решить мою проблему не обвешивая код try\except'ами, 'key' in dict и len(list) > N?
Заранее благодарен за советы!