Python:pywintypes.com_error: -2147221021,'操作无法使用'的解决办法

该文章已生成可运行项目,

之前用win32com.client一直很正常,但是昨天下午突然崩了,一直提示:pywintypes.com_error: <-2147221021,‘操作无法使用’。
往下看,发现错误代码进一步为:pywintypes.com_error: <=2147221164, ‘没有注册类’
网上找了一下解决办法,基本都只说了一部分,我归纳总结一下:
1、不是64、32位的问题,因为我的系统是win7 64, Python是anaconda的64位;
2、com组件里丢失了Excel.Application是对的,找是否有com组建的办法可以看https://blog.csdn.net/l490134872/article/details/80250395
但是我和博主不一样的地方是,我在DCOM配置里根本就找不到Excel.Application
3、我搜索了一下Excel.exe,发现修改时间是中午11:50,我想到了下午2:00左右,我打开电脑后,发现桌面excel等的图标都丢失了,重启后正常,那个时候并没有想太多,可能那个时候就已经出bug了,个人怀疑有2种可能:1)、Office 365更新了,同时没有在DCOM里注册;2)、其它软件冲突造成丢失,我中午的时候在用mysql和navicat
4、不管如何,解决思路有了,就是要在DCOM里重新注册Excel.Application。我不知道是否有直接注册的办法,但我还是用了笨办法:重装office;
5、有人说重装了也解决不了问题,那是因为卸载后有一些注册表里的东东没有清理干净,所以我下载了office官方的清理工具o15-ctrremove.diagcab,先卸载office,再使用工具清除电脑内残留组建,最后重装,完美解决(这个方法也同样适合于office账号无法登陆的问题)

本文章已经生成可运行项目
`pywintypes.com_error: (-2147417848, 'The object invoked has disconnected from its clients.', None, None)` 错误通常表示与 COMComponent Object Model)对象的连接已断开。以下是一些可能的解决方法: ### 检查对象生命周期 确保在使用 COM 对象期间,对象不会被意外释放或销毁。有时候,对象可能因为超出作用域或被提前关闭而导致连接断开。 ```python import win32com.client try: # 创建 COM 对象 obj = win32com.client.Dispatch("Some.Application") # 使用对象进行操作 result = obj.SomeMethod() # 确保在使用完对象后正确释放资源 obj = None except pywintypes.com_error as e: print(f"COM 错误: {e}") ``` ### 重新初始化对象 如果连接断开,可以尝试重新初始化 COM 对象。 ```python import win32com.client import pywintypes try: obj = win32com.client.Dispatch("Some.Application") try: result = obj.SomeMethod() except pywintypes.com_error as e: if e.args[0] == -2147417848: # 重新初始化对象 obj = win32com.client.Dispatch("Some.Application") result = obj.SomeMethod() except pywintypes.com_error as e: print(f"COM 错误: {e}") ``` ### 检查应用程序状态 确保与 COM 对象关联的应用程序正在运行,并且没有崩溃或异常退出。有时候,应用程序的异常关闭会导致 COM 连接断开。 ### 增加错误处理和重试机制 在调用 COM 对象的方法时,增加错误处理和重试机制,以应对临时的连接问题。 ```python import win32com.client import pywintypes import time MAX_RETRIES = 3 retry_count = 0 while retry_count < MAX_RETRIES: try: obj = win32com.client.Dispatch("Some.Application") result = obj.SomeMethod() break except pywintypes.com_error as e: if e.args[0] == -2147417848: retry_count += 1 print(f"连接断开,重试第 {retry_count} 次...") time.sleep(1) # 等待 1 秒后重试 else: print(f"其他 COM 错误: {e}") break else: print("达到最大重试次数,无法解决问题。") ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值