Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def traverse(contents, path, default=None):
try:
try:
value = mget(contents, path)
except (IndexOutOfRange, MissingKeyError):
if default is None:
raise
value = default
except (IndexOutOfRange, MissingKeyError,
NonDictLikeTypeError, IndexNotIntegerError) as exc:
msg = str(exc)
raise InvalidPath(
"invalid path %r, %s"
% (path, msg.replace('list', 'sequence').replace('dict', 'struct')))
return value
except ValueError:
raise IndexNotIntegerError(
"non-integer index %r provided on a list."
% head)
try:
value = dct[idx]
except IndexError:
raise IndexOutOfRange(
"index %d is out of range (%d elements in list)."
% (idx, len(dct)))
else:
try:
value = dct[head]
except KeyError:
## Replace with a more informative KeyError
raise MissingKeyError(
"missing key %r in dict."
% (head, ))
except Exception:
raise NonDictLikeTypeError(
"can't query subvalue %r of a leaf%s."
% (head,
(" (leaf value is %r)" % dct)
if len(repr(dct)) < 15 else ""))
return aget(value, key)