<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _numeric_coercion(value, coercion_function = None, allow_empty = False, minimum = None, maximum = None):
 """Validate that ``value`` is numeric and coerce using ``coercion_function``. :param value: The value to validate. :param coercion_function: The function to use to coerce ``value`` to the desired type. :type coercion_function: callable :param allow_empty: If ``True``, returns :obj:`None <python:None>` if ``value`` is :obj:`None <python:None>`. If ``False``, raises a :class:`EmptyValueError <validator_collection.errors.EmptyValueError>` if ``value`` is :obj:`None <python:None>`. Defaults to ``False``. :type allow_empty: :class:`bool <python:bool>` :returns: ``value`` / :obj:`None <python:None>` :rtype: the type returned by ``coercion_function`` :raises CoercionFunctionEmptyError: if ``coercion_function`` is empty :raises EmptyValueError: if ``value`` is :obj:`None <python:None>` and ``allow_empty`` is ``False`` :raises CannotCoerceError: if ``coercion_function`` raises an :class:`ValueError <python:ValueError>`, :class:`TypeError <python:TypeError>`, :class:`AttributeError <python:AttributeError>`, :class:`IndexError <python:IndexError>, or :class:`SyntaxError <python:SyntaxError>` """

    if coercion_function is None:
        raise errors.CoercionFunctionEmptyError('coercion_function cannot be empty')
    elif not hasattr(coercion_function, '__call__'):
        raise errors.NotCallableError('coercion_function must be callable')

    value = numeric(value,                                                      # pylint: disable=E1123
                    allow_empty = allow_empty,
                    minimum = minimum,
                    maximum = maximum,
                    force_run = True)

    if value is not None:
        try:
            value = coercion_function(value)
        except (ValueError, TypeError, AttributeError, IndexError, SyntaxError):
            raise errors.CannotCoerceError(
                'cannot coerce value (%s) to desired type' % value
            )

    return value