diff options
author | Sergey M․ <dstftw@gmail.com> | 2016-06-12 06:05:34 +0700 |
---|---|---|
committer | Sergey M․ <dstftw@gmail.com> | 2016-06-12 06:05:34 +0700 |
commit | 329ca3bef695bff011ed9b2d5f03e1331bf5bf0f (patch) | |
tree | 0d644ffdb698d623a0af4354d1ac171c26b84804 | |
parent | 2c3322e36ef23eb0566b820dd8e8711de20ed963 (diff) |
[utils] Add try_get
To reduce boilerplate when accessing JSON
-rw-r--r-- | youtube_dl/utils.py | 10 |
1 files changed, 10 insertions, 0 deletions
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) |