fix(tools): widen error isolation to cover full single-video pipeline

Codex 功能质量审查发现 _build_one 的 try/except 仅包裹 build_async,
构造器、SRT 解析、save_json、save_progress 抛异常会逃逸到 gather 中止整批。
将 try 边界扩大到覆盖完整单视频流程(构建→建树→保存→进度记录)。
This commit is contained in:
2026-07-11 12:02:21 -04:00
parent 56fe138a46
commit c5bf7e1a61
+6 -6
View File
@@ -300,21 +300,21 @@ async def main_async(args: argparse.Namespace) -> None:
async with video_sem: async with video_sem:
vid = video_path.stem vid = video_path.stem
logger.info("开始建树 {}", vid) logger.info("开始建树 {}", vid)
try:
builder = VideoTreeBuilder(vlm=vlm, llm=llm, config=tree_cfg, api_semaphore=api_sem) builder = VideoTreeBuilder(vlm=vlm, llm=llm, config=tree_cfg, api_semaphore=api_sem)
srt_entries = _find_srt_entries(video_path, srt_dir) srt_entries = _find_srt_entries(video_path, srt_dir)
try:
index = await builder.build_async(str(video_path), srt_entries) 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: except Exception as exc:
# WHY: 单视频错误隔离——一个视频失败不拖垮整批; # WHY: 单视频错误隔离——一个视频失败不拖垮整批;
# 失败清单汇总上报,vid 不进 progress,下次重跑自动重建。 # 失败清单汇总上报,vid 不进 progress,下次重跑自动重建。
logger.error("建树失败 {} ({}): {}", vid, type(exc).__name__, exc) logger.error("建树失败 {} ({}): {}", vid, type(exc).__name__, exc)
failed.append(vid) failed.append(vid)
return 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: if completed % 5 == 0:
elapsed = time.time() - start_time elapsed = time.time() - start_time
rate = completed / elapsed * 60 if elapsed > 0 else 0 rate = completed / elapsed * 60 if elapsed > 0 else 0