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

1"""可扩展错误处理 — 注册自定义异常 handler。 

2 

3边界:仅作为异常 handler 注册表。工具错误走 merco.tools.errors,LLM 错误走 merco.core.llm.errors。 

4""" 

5from __future__ import annotations 

6 

7import logging 

8from typing import Callable 

9 

10logger = logging.getLogger("merco.self_healing") 

11 

12 

13_extra_handlers: dict[type, Callable] = {} 

14 

15 

16def register_handler(exc_type: type, handler: Callable) -> None: 

17 """注册自定义异常处理器。 

18 

19 handler 签名: (exc, tool_name, tool_schema) -> dict | None 

20 返回 None 表示不处理,走默认逻辑。 

21 """ 

22 _extra_handlers[exc_type] = handler 

23 

24 

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