Coverage for merco/core/self_healing.py: 47%
15 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 14:04 +0800
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 14:04 +0800
1"""可扩展错误处理 — 注册自定义异常 handler。
3边界:仅作为异常 handler 注册表。工具错误走 merco.tools.errors,LLM 错误走 merco.core.llm.errors。
4"""
5from __future__ import annotations
7import logging
8from typing import Callable
10logger = logging.getLogger("merco.self_healing")
13_extra_handlers: dict[type, Callable] = {}
16def register_handler(exc_type: type, handler: Callable) -> None:
17 """注册自定义异常处理器。
19 handler 签名: (exc, tool_name, tool_schema) -> dict | None
20 返回 None 表示不处理,走默认逻辑。
21 """
22 _extra_handlers[exc_type] = handler
25def _apply_custom_handlers(
26 exc: Exception, tool_name: str, tool_schema: dict | None,
27) -> dict | None:
28 """依次尝试注册的自定义 handler"""
29 for exc_type, handler in _extra_handlers.items():
30 if isinstance(exc, exc_type):
31 try:
32 return handler(exc, tool_name, tool_schema)
33 except Exception:
34 logger.warning("自定义 handler 异常", exc_info=True)
35 return None