Вам потребуется указать несколько элементов для функции маскирования ошибок: исключения, которые вы хотите преобразовать в значение по умолчанию, значение по умолчанию, вызываемую функцию и ее аргументы:
def if_error(exceptions, fail_value, fn, *args, **kwargs):
try:
return fn(*args, **kwargs)
except exceptions:
return fail_value
def test_fn(x):
return int(x)
if __name__=='__main__':
print if_error(ValueError, 0, test_fn, '42')
print if_error(ValueError, -1, test_fn, 'abc')
print if_error(TypeError, -2, test_fn, 'abc')
Что дает нам:
42
-1
Traceback (most recent call last):
File "test.py", line 13, in <module>
print if_error(TypeError, -2, test_fn, 'abc')
File "test.py", line 3, in if_error
return fn(*args, **kwargs)
File "test.py", line 8, in test_fn
return int(x)
ValueError: invalid literal for int() with base 10: 'abc'
Как вы можете видеть, последний вызов вызвал исключение, потому что мы не ловили ValueError
s с ним.