Согласно документации glom
API.
default (object)
- Необязательное значение по умолчанию для возврата в случае исключения, указанного skip_exc
, повышено.
skip_exc
(Исключение) - необязательное исключение или кортеж исключений, которые следует игнорировать и возвращать default
(None
, если опущено). Если skip_exc
и default не заданы, glom
Так
instance_names = glom(data, ('groups', ['instance.name']), skip_exc=PathAccessError)
вернет значение по умолчанию (None
), когда возникнет PathAccessError
Exception. Вот соответствующая часть исходного кода, которая объясняет это.
default = kwargs.pop('default', None if 'skip_exc' in kwargs else _MISSING)
skip_exc = kwargs.pop('skip_exc', () if default is _MISSING else GlomError)
...
...
try:
ret = _glom(target, spec, scope)
except skip_exc:
if default is _MISSING:
raise
ret = default
Вот один из способов решения этой проблемы.
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:21:23) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from glom import glom, SKIP
>>>
>>> data = {
... 'groups': [
... {'instance': {'name': 'football'}},
... {'instance': {'name': 'rugby'}},
... {'id': 145, 'type': 'unknown'},
... ]
... }
>>>
>>> instance_names = glom(data, ('groups', [lambda x: glom(x, 'instance.name', default=SKIP)]))
>>> print(instance_names)
['football', 'rugby']
* SKIP
singleton может быть возвращено из функции или включено через литерал для отмены назначения в выходной объект.