mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-08-03 08:38:33 +02:00
[utils] Add try_call
This commit is contained in:
parent
f189faf1ce
commit
c4f60dd7cd
5 changed files with 25 additions and 19 deletions
|
@ -3096,15 +3096,19 @@ 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):
|
||||
for get in variadic(getter):
|
||||
def try_call(*funcs, expected_type=None, args=[], kwargs={}):
|
||||
for f in funcs:
|
||||
try:
|
||||
v = get(src)
|
||||
except (AttributeError, KeyError, TypeError, IndexError):
|
||||
val = f(*args, **kwargs)
|
||||
except (AttributeError, KeyError, TypeError, IndexError, ZeroDivisionError):
|
||||
pass
|
||||
else:
|
||||
if expected_type is None or isinstance(v, expected_type):
|
||||
return v
|
||||
if expected_type is None or isinstance(val, expected_type):
|
||||
return val
|
||||
|
||||
|
||||
def try_get(src, getter, expected_type=None):
|
||||
return try_call(*variadic(getter), args=(src,), expected_type=expected_type)
|
||||
|
||||
|
||||
def filter_dict(dct, cndn=lambda _, v: v is not None):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue