From: Sergey M․ Date: Sat, 11 Jun 2016 23:05:34 +0000 (+0700) Subject: [utils] Add try_get X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=329ca3bef695bff011ed9b2d5f03e1331bf5bf0f;p=youtube-dl [utils] Add try_get To reduce boilerplate when accessing JSON --- diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 0acbd67de..c8308ba3a 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -1901,6 +1901,16 @@ def dict_get(d, key_or_keys, default=None, skip_false_values=True): return d.get(key_or_keys, default) +def try_get(src, getter, expected_type=None): + try: + v = getter(src) + except (AttributeError, KeyError, TypeError, IndexError): + pass + else: + if expected_type is None or isinstance(v, expected_type): + return v + + def encode_compat_str(string, encoding=preferredencoding(), errors='strict'): return string if isinstance(string, compat_str) else compat_str(string, encoding, errors)