| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- """错误处理装饰器和工具函数"""
- import logging
- from functools import wraps
- from typing import Callable, Any
- from utils.exceptions import (
- LearningAgentError,
- DomainNotFoundError,
- FileReadError,
- FileWriteError,
- LLMError,
- )
- logger = logging.getLogger(__name__)
- def handle_errors(func: Callable) -> Callable:
- """
- 统一错误处理装饰器
- 捕获异常并返回友好的错误消息
- """
- @wraps(func)
- def wrapper(*args, **kwargs) -> Any:
- try:
- return func(*args, **kwargs)
- except DomainNotFoundError as e:
- return f"❌ 错误:{e}\n请先使用 /create 创建学习计划。"
- except FileReadError as e:
- return f"❌ {e}\n请检查文件路径和权限。"
- except FileWriteError as e:
- return f"❌ {e}\n请检查磁盘空间和权限。"
- except LLMError as e:
- return f"❌ {e}\n请稍后重试或检查配置。"
- except KeyboardInterrupt:
- return "\n\n👋 操作已取消"
- except LearningAgentError as e:
- logger.error(f"LearningAgent error in {func.__name__}: {e}")
- return f"❌ {e}"
- except Exception as e:
- logger.error(f"Unexpected error in {func.__name__}: {e}", exc_info=True)
- return f"❌ 发生未知错误:{e}\n请查看日志或联系开发者。"
- return wrapper
|