From c5bf7e1a613ba9a35e76795b613d15dd46ff900a Mon Sep 17 00:00:00 2001 From: iomgaa Date: Sat, 11 Jul 2026 12:02:21 -0400 Subject: [PATCH] fix(tools): widen error isolation to cover full single-video pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Codex 功能质量审查发现 _build_one 的 try/except 仅包裹 build_async, 构造器、SRT 解析、save_json、save_progress 抛异常会逃逸到 gather 中止整批。 将 try 边界扩大到覆盖完整单视频流程(构建→建树→保存→进度记录)。 --- tools/build_trees.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/build_trees.py b/tools/build_trees.py index 5eeeb56..c5fbd67 100644 --- a/tools/build_trees.py +++ b/tools/build_trees.py @@ -300,21 +300,21 @@ async def main_async(args: argparse.Namespace) -> None: async with video_sem: vid = video_path.stem logger.info("开始建树 {}", vid) - builder = VideoTreeBuilder(vlm=vlm, llm=llm, config=tree_cfg, api_semaphore=api_sem) - srt_entries = _find_srt_entries(video_path, srt_dir) try: + builder = VideoTreeBuilder(vlm=vlm, llm=llm, config=tree_cfg, api_semaphore=api_sem) + srt_entries = _find_srt_entries(video_path, srt_dir) index = await builder.build_async(str(video_path), srt_entries) + tree_path = out_dir / vid / "tree.json" + tree_path.parent.mkdir(parents=True, exist_ok=True) + index.save_json(str(tree_path)) + await save_progress(progress_path, progress_lock, vid) + completed += 1 except Exception as exc: # WHY: 单视频错误隔离——一个视频失败不拖垮整批; # 失败清单汇总上报,vid 不进 progress,下次重跑自动重建。 logger.error("建树失败 {} ({}): {}", vid, type(exc).__name__, exc) failed.append(vid) return - tree_path = out_dir / vid / "tree.json" - tree_path.parent.mkdir(parents=True, exist_ok=True) - index.save_json(str(tree_path)) - await save_progress(progress_path, progress_lock, vid) - completed += 1 if completed % 5 == 0: elapsed = time.time() - start_time rate = completed / elapsed * 60 if elapsed > 0 else 0