Python中如何解决pywintypes.com_error: (-2147221005, '无效的类字符串')错误
- https://github.com/nateshmbhat/pyttsx3/issues/32
- https://bbs.csdn.net/topics/392378574
- https://blog.csdn.net/bamuta/article/details/44460187
- https://segmentfault.com/q/1010000014342682
- https://www.cnblogs.com/jiangzhaowei/p/6815958.html 参考了这五个连接 python 32bit 64bit 都不行
安装了 : Speech SDK 5.1
pytts3 pywin32 安装了
python 代码就是简单的一个 tts 调用, 应该是环境的问题。。。但是不知道怎么办了, speech sdk3 找不到下载
# -*- coding: utf-8 -*-
import pythoncom
from win32com import client
pythoncom.CoInitialize()
engine=client.Dispatch(“SAPI.SpVoice”)
engine.Speak(‘hello world’)
报错如下:
$ C:\Python36-32\python.exe test.py
Traceback (most recent call last):
File “C:\Python36-32\lib\site-packages\win32com\client\dynamic.py”, line 89, in GetGoodDispatch
IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221005, ‘无效的类字符串’,
None, None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “test.py”, line 5, in <module>
engine=client.Dispatch(“SAPI.SpVoice”)
File "C:\Python36-32\lib\site-packages\win32com\client_init.py", line 95, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File “C:\Python36-32\lib\site-packages\win32com\client\dynamic.py”, line 114, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File “C:\Python36-32\lib\site-packages\win32com\client\dynamic.py”, line 91, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221005, ‘无效的类字符串’,
None, None)
Python中如何解决pywintypes.com_error: (-2147221005, '无效的类字符串')错误
说明 SAPI.SpVoice 这个 ProgID 没有注册
这个错误通常是因为你尝试通过COM接口创建对象时,传入的ProgID或CLSID字符串格式不对,或者系统里压根没注册这个COM组件。
最常见的情况是你用了win32com.client.Dispatch(),但给的类名不对。比如你想操作Excel却写错了版本号:
import win32com.client
# 错误示例 - Excel 2016的ProgID是"Excel.Application",不是"Excel.Application.16"
try:
# 这个会报错:(-2147221005, '无效的类字符串')
excel = win32com.client.Dispatch("Excel.Application.16")
except Exception as e:
print(f"错误: {e}")
# 正确写法
excel = win32com.client.Dispatch("Excel.Application") # 通用版本
# 或者
excel = win32com.client.Dispatch("Excel.Application.16") # 具体版本(如果已安装)
检查ProgID是否正确,用系统的注册表编辑器(regedit)搜一下你要用的组件到底注册了什么名字。比如搜"Excel.Application"看看有没有。
如果是自己写的COM组件,记得先注册:regsvr32 yourdll.dll。
总结:检查COM类名字符串是否正确,确认组件已注册。
亲测 Python3.6.7 32 位,网上下载了 dll 文件,然后注册了 dll,复制你的代码完美运行。
没有安装你提供的那个 sdk,没有安装你的 pytts3,完美运行,你可以参考下,是不是你安装的版本什么的不对。
你下载的那个 dll?
我直接百度了一个,SAPI.SpVoice 以这个为关键字搜索的一个 zip 文件,然后注册了直接就可以调用了
谢谢了 大概率是我的系统是精简版被阉割了

