循环调用PyImport_ImportModule,写入异常

博客指出在循环调用不同Python文件时,需将初始化和结束初始化操作放在循环外面,否则会出现写入异常,强调了正确处理初始化操作对避免异常的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 循环调用不同python文件,初始化和结束初始化放在循环外面,否则会写入异常

golden_shield.py import os import shutil import traceback import functools import logging import time # 配置日志 logger = logging.getLogger("金钟罩") logger.setLevel(logging.INFO) BACKUP_DIR = "./.module_backups" # 模块备份存放目录 os.makedirs(BACKUP_DIR, exist_ok=True) def backup_module(module_path: str): """备份模块代码""" if not os.path.exists(module_path): logger.warning(f"无法备份,模块路径不存在:{module_path}") return base_name = os.path.basename(module_path) backup_path = os.path.join(BACKUP_DIR, f"{base_name}.bak") try: shutil.copy(module_path, backup_path) logger.info(f"[金钟罩] 模块已备份至:{backup_path}") except Exception as e: logger.error(f"[金钟罩] 备份失败:{e}") def rollback_module(module_path: str): """将模块代码回滚到上一个备份版本""" base_name = os.path.basename(module_path) backup_path = os.path.join(BACKUP_DIR, f"{base_name}.bak") if os.path.exists(backup_path): shutil.copy(backup_path, module_path) logger.warning(f"[金钟罩] 模块已回滚:{module_path}") else: logger.error(f"[金钟罩] 无法回滚,找不到备份:{backup_path}") def fix_with_ai(module_path: str, error_log: str): """占位:后期接入 GPT 自动修复逻辑""" logger.info(f"[金钟罩] 可调用 AI 修复模块:{module_path},错误如下:\n{error_log}") # TODO: 接入 GPT 调用 + 代码替换 return False # 当前不执行修复 def safe_run(module_path: str): """装饰器:安全运行模块,并在异常备份 / 修复 / 回滚""" def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): backup_module(module_path) try: return func(*args, **kwargs) except Exception as e: error_trace = traceback.format_exc() logger.error(f"[金钟罩] 模块运行异常:{e}") logger.error(error_trace) # 尝试修复(可选) success = fix_with_ai(module_path, error_trace) if not success: rollback_module(module_path) return None # 或自定义错误返回 return wrapper return decorator 使用示例 from golden_shield import safe_run MODULE_PATH = "modules/example_module.py" @safe_run(MODULE_PATH) def run_module(): import modules.example_module as mod mod.run() run_module() 🧩 后续可拓展: • fix_with_ai() → 接入你自己的 GPT 本地模型或 OpenAI API,自动生成修复代码 • 加入 TestRunner,执行修复后自动跑测试用例 • 多版本历史备份(.bak1, .bak2)管理 • 每次修复都记录在 .fixlog.json 里,形成自愈学习历史 模块运行异常 → 捕捉错误 → 调用 GPT 修复 → 写入新代码 → 自动运行验证 → 回滚失败
07-16
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值