修改语音注册表后pyttsx3获取语音描述报COMError求助
解决pyttsx3获取语音描述时的COMError问题
核心原因
修改语音相关注册表后,Windows SAPI5的语音条目出现损坏,导致pyttsx3调用GetDescription()时触发COM错误。重装模块仅能修复Python包层面问题,无法解决系统注册表的损坏。
修复步骤
1. 恢复语音注册表默认设置
- 按下
Win + R,输入regedit打开注册表编辑器 - 定位路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens - 右键点击
Tokens项,选择导出备份当前设置(防止误操作) - 删除
Tokens下所有自定义添加的子项;若修改了原有系统语音项,建议直接删除Tokens下对应子项后重新安装语音包 - 关闭注册表编辑器,重启电脑
2. 重新安装系统语音包
- 打开设置 → 时间和语言 → 语音
- 在语音语言区域,点击添加语音,选择对应语言的官方语音包完成安装
- 安装结束后重启系统,再测试pyttsx3
3. 绕过GetDescription()的临时应急修复
如果暂时无法修复注册表,可修改pyttsx3的驱动代码跳过描述获取:
- 找到文件路径:
C:\Users\Compu Tech\AppData\Local\Programs\Python\Python312\Lib\site-packages\pyttsx3\drivers\sapi5.py - 打开文件,定位到
_toVoice函数(约第77行),修改为:
def _toVoice(self, attr): # 跳过GetDescription()调用,用语音ID替代描述 return Voice(attr.Id, attr.Id)
- 保存文件后重新运行代码
4. 重置SAPI5语音引擎
- 按下
Win + R,输入cmd打开命令提示符 - 执行命令:
C:\Windows\System32\speech\speechsapi.exe - 在弹出的语音属性窗口中,切换到文本到语音选项卡,确认语音列表显示正常,点击应用
验证代码
修复后用以下代码测试功能:
import pyttsx3 engine = pyttsx3.init() voices = engine.getProperty('voices') print([voice.id for voice in voices]) engine.say("测试语音功能恢复正常") engine.runAndWait()
内容的提问来源于stack exchange,提问作者Bodawy
相关产品推荐
相关产品推荐

