Windows下Python3生成Word脚本偶发pywin32 ModuleNotFoundError求助
问题根因
该偶发报错本质是win32com的COM类型库缓存生成/读取失败,多触发于并发调用COM接口、Word进程残留、缓存读写冲突、Python与Office位数不匹配的场景。你之前删除gen_py文件夹无效,通常是因为删除时缓存被占用、删除后再次并发生成了损坏的缓存文件。
可行解决方案
- 优先使用动态调度跳过缓存(最有效解决偶发问题)
把原有的win32.gencache.EnsureDispatch('Word.Application')调用替换为win32.Dispatch('Word.Application'),该模式不会生成本地gen_py缓存,从根源避免缓存读写冲突。如果调用时出现Word常量未定义的问题,可在初始化前提前预生成一次固定版本的缓存:win32.gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4) - 修正缓存清理操作
原有删除gen_py的操作需要先释放所有占用缓存的Word进程,执行顺序如下:- 执行命令
taskkill /f /im WINWORD.EXE强制结束所有后台残留的Word进程 - 进入
%LOCALAPPDATA%\Temp\路径,删除整个gen_py文件夹 - 单独启动一次脚本完成缓存生成,再正常执行批量任务
- 执行命令
- 规范COM对象释放逻辑
每次生成文档完成后,必须按顺序释放文档和Word实例,避免进程残留:doc.Close(SaveChanges=1) # 根据需求选择是否保存修改 del doc word.Quit() del word - 检查Python与Office位数匹配
你的虚拟环境为32位Python,需确认本地安装的Office同样为32位版本,两者位数不匹配会频繁出现COM接口调用异常。
内容的提问来源于stack exchange,提问作者Christoph Stade
相关产品推荐
相关产品推荐

