Files
assist/src/web/error_handlers.py
zhaojie 2026007045 refactor: 移除冗余文件并优化代码结构
- 删除多个不再使用的脚本和配置文件,包括 `auto_push.bat`, `check_and_fix_users.py`, `init.sql` 等。
- 新增 `git_push.bat` 和 `git_push.sh` 脚本以简化 Git 推送流程。
- 更新 `README.md` 以反映最新的功能和结构变化。
- 优化前端代码,添加新的页面和组件,提升用户体验。

此提交旨在清理项目结构并增强代码可维护性。
2025-12-08 00:53:23 +08:00

75 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
"""
错误处理装饰器和工具
提供统一的错误处理模式
"""
import logging
from functools import wraps
from typing import Callable, Any, Dict
from flask import jsonify
logger = logging.getLogger(__name__)
def handle_api_errors(func: Callable) -> Callable:
"""API错误处理装饰器"""
@wraps(func)
def wrapper(*args, **kwargs) -> Dict[str, Any]:
try:
return func(*args, **kwargs)
except ValueError as e:
logger.warning(f"参数错误 {func.__name__}: {e}")
return jsonify({"error": f"参数错误: {str(e)}"}), 400
except PermissionError as e:
logger.warning(f"权限错误 {func.__name__}: {e}")
return jsonify({"error": f"权限不足: {str(e)}"}), 403
except FileNotFoundError as e:
logger.warning(f"文件未找到 {func.__name__}: {e}")
return jsonify({"error": f"文件未找到: {str(e)}"}), 404
except Exception as e:
logger.error(f"未处理错误 {func.__name__}: {e}")
return jsonify({"error": f"服务器内部错误: {str(e)}"}), 500
return wrapper
def handle_database_errors(func: Callable) -> Callable:
"""数据库错误处理装饰器"""
@wraps(func)
def wrapper(*args, **kwargs) -> Dict[str, Any]:
try:
return func(*args, **kwargs)
except Exception as e:
logger.error(f"数据库错误 {func.__name__}: {e}")
return jsonify({"error": f"数据库操作失败: {str(e)}"}), 500
return wrapper
def handle_service_errors(func: Callable) -> Callable:
"""服务错误处理装饰器"""
@wraps(func)
def wrapper(*args, **kwargs) -> Dict[str, Any]:
try:
return func(*args, **kwargs)
except Exception as e:
logger.error(f"服务错误 {func.__name__}: {e}")
return jsonify({"error": "服务暂时不可用"}), 503
return wrapper
def create_error_response(message: str, status_code: int = 500, details: str = None) -> tuple:
"""创建标准错误响应"""
response = {"error": message}
if details:
response["details"] = details
logger.error(f"错误响应: {message} - {details}")
return jsonify(response), status_code
def create_success_response(data: Any = None, message: str = "操作成功") -> Dict[str, Any]:
"""创建标准成功响应"""
response = {"success": True, "message": message}
if data is not None:
response["data"] = data
return response