Spaces:
Configuration error
Configuration error
| import contextlib | |
| import functools | |
| from .logger import print_error | |
| class TryExcept(contextlib.ContextDecorator): | |
| """Usage: @TryExcept() decorator or 'with TryExcept():' context manager.""" | |
| def __init__(self, msg: str = "", verbose: bool = True): | |
| """Initialize TryExcept class with optional message and verbosity settings.""" | |
| self.msg = msg | |
| self.verbose = verbose | |
| def __call__(self, func): | |
| """ | |
| Allows the instance to be used as a decorator. | |
| """ | |
| def wrapper(*args, **kwargs): | |
| try: | |
| return func(*args, **kwargs) | |
| except Exception as e: | |
| if self.verbose: | |
| msg = f"{self.msg}{': ' if self.msg else ''}[red]{e}[/red]" | |
| print_error(f"caught by [green]{func.__name__}[/green] decorator. {msg}") | |
| return wrapper | |
| def __enter__(self): | |
| """Executes when entering TryExcept context, initializes instance.""" | |
| return self | |
| def __exit__(self, exc_type, value, traceback): | |
| """Defines behavior when exiting a 'with' block, prints error message if necessary.""" | |
| if self.verbose and value: | |
| print_error(f"{self.msg}{': ' if self.msg else ''}{value}") | |
| return True | |