From 3cf7c1d2378225405111aa2f731d7ef64f490c23 Mon Sep 17 00:00:00 2001 From: molanp <104612722+molanp@users.noreply.github.com> Date: Thu, 17 Jul 2025 19:01:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(plugin=5Fstore):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=80=92=E4=BB=A3=E9=94=99=E8=AF=AF=20(#1986)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在查找插件时使用 next() 函数的默认值 None,避免抛出 StopIteration 异常 - 增加对未找到插件的错误处理,返回相应的错误信息 - 优化了插件查找逻辑,提高了代码的健壮性和可读性 Co-authored-by: HibiKier <45528451+HibiKier@users.noreply.github.com> --- zhenxun/builtin_plugins/plugin_store/data_source.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/zhenxun/builtin_plugins/plugin_store/data_source.py b/zhenxun/builtin_plugins/plugin_store/data_source.py index b2dc96dc..58fab1a1 100644 --- a/zhenxun/builtin_plugins/plugin_store/data_source.py +++ b/zhenxun/builtin_plugins/plugin_store/data_source.py @@ -198,7 +198,9 @@ class StoreManager: except ValueError as e: return str(e) db_plugin_list = await cls.get_loaded_plugins("module") - plugin_info = next(p for p in plugin_list if p.module == plugin_key) + plugin_info = next((p for p in plugin_list if p.module == plugin_key), None) + if plugin_info is None: + return f"未找到插件 {plugin_key}" if plugin_info.module in [p[0] for p in db_plugin_list]: return f"插件 {plugin_info.name} 已安装,无需重复安装" is_external = True @@ -307,7 +309,9 @@ class StoreManager: plugin_key = await cls._resolve_plugin_key(plugin_id) except ValueError as e: return str(e) - plugin_info = next(p for p in plugin_list if p.module == plugin_key) + plugin_info = next((p for p in plugin_list if p.module == plugin_key), None) + if plugin_info is None: + return f"未找到插件 {plugin_key}" path = BASE_PATH if plugin_info.github_url: path = BASE_PATH / "plugins" @@ -383,7 +387,9 @@ class StoreManager: plugin_key = await cls._resolve_plugin_key(plugin_id) except ValueError as e: return str(e) - plugin_info = next(p for p in plugin_list if p.module == plugin_key) + plugin_info = next((p for p in plugin_list if p.module == plugin_key), None) + if plugin_info is None: + return f"未找到插件 {plugin_key}" logger.info(f"尝试更新插件 {plugin_info.name}", LOG_COMMAND) db_plugin_list = await cls.get_loaded_plugins("module", "version") suc_plugin = {p[0]: (p[1] or "Unknown") for p in db_plugin_list}