У меня есть класс декоратор который используется для обработки исключений в сервисах.
def __call__(self, controller_func):
@functools.wraps(controller_func)
def wrapper(instance, *args, **kwargs):
try:
return controller_func(instance, *args, **kwargs)
except (
errors.FileExtensionError,
errors.LargeFileSizeError
) as error:
return upload_fail(
message=self.__errors_handle_rules[type(error)]['desc']
)
except errors.DataAboutRecordNotExistsError:
abort(404)
except errors.ServiceError as error:
self.__handle_error_with_form_data(
instance=instance,
field_name=self.__errors_handle_rules[type(error)].get(
'form_field_name'
),
error_msg=self.__errors_handle_rules[type(error)]['desc']
)
finally:
return controller_func(instance, *args, **kwargs)
return wrapper
функция обёртки получилась слишком длинная. Стоит ли переделать этот декоратор на несколько, для каждой групы исключений? Это может стать результатом таких вещей:
@first_dec
@second_dec
@third_dec
@fourth_dec
def func():
pass
С другой стороны код на уровне обработчика сервисных ошибок станет более читаемым, а к конкретному контроллеру будут ловится только те исключения, которые могут возникнут на уровне сервесов которые он использует.