"""Create fallback_executor
Generated by Phi-Octopus Eden
2025-11-06 14:25:06.380987
"""

```python
from typing import Callable, Any


class FallbackExecutor:
    """
    A class for executing a function with fallback behavior in case of errors.

    Args:
        main_function: The primary function to execute.
        fallback_function: The function to run if an error occurs during the execution of `main_function`.
        error_types: A tuple or list of exception types that should trigger the fallback. If None, all exceptions are caught.
    
    Usage Example:
    >>> def divide(a: float, b: float) -> float:
    ...     return a / b
    ...
    >>> def safe_divide(a: float, b: float) -> float:
    ...     try:
    ...         result = divide(a, b)
    ...     except ZeroDivisionError as e:
    ...         print(f"Caught an error: {e}")
    ...         return 0.0
    ...     return result
    ...
    >>> executor = FallbackExecutor(main_function=divide, fallback_function=safe_divide, error_types=(ZeroDivisionError,))
    >>> result = executor.execute(10, 2)
    5.0
    >>> result = executor.execute(10, 0)  # This should trigger the fallback
    Caught an error: division by zero
    0.0
    """

    def __init__(self, main_function: Callable[..., Any], fallback_function: Callable[..., Any], error_types: tuple[type[Exception], ...] = None):
        self.main_function = main_function
        self.fallback_function = fallback_function
        self.error_types = error_types

    def execute(self, *args: Any, **kwargs: Any) -> Any:
        """
        Execute the main function. If an exception occurs and is caught,
        the fallback function is executed.
        """
        try:
            result = self.main_function(*args, **kwargs)
        except Exception as e:
            if not self.error_types or isinstance(e, self.error_types):
                result = self.fallback_function(*args, **kwargs)
            else:
                raise
        return result


# Example usage of the FallbackExecutor class
def divide(a: float, b: float) -> float:
    """Divide two numbers."""
    return a / b

def safe_divide(a: float, b: float) -> float:
    """Safe division with fallback to 0.0 in case of ZeroDivisionError."""
    try:
        result = divide(a, b)
    except ZeroDivisionError as e:
        print(f"Caught an error: {e}")
        return 0.0
    return result

executor = FallbackExecutor(main_function=divide, fallback_function=safe_divide, error_types=(ZeroDivisionError,))
result = executor.execute(10, 2)  # Should be 5.0
print(result)

result = executor.execute(10, 0)  # This should trigger the fallback
print(result)
```