使用pyttsx3开发语音助手时遭遇KeyError: 'VoiceAge'问题求助
解决KeyError: 'VoiceAge'问题
错误原因
你大概率是在后续代码里把pyttsx3返回的Voice对象当成字典,用voice['VoiceAge']这种方式访问属性,但实际上pyttsx3的Voice实例是通过属性访问(而非字典键)获取信息的,且属性名是小写的age,不是VoiceAge。另外,不同TTS引擎(比如Windows的SAPI5、macOS的NSSpeechSynthesizer)支持的属性存在差异,部分引擎可能压根没有age属性。
解决方案
先确认当前环境下Voice对象的可用属性
在代码中添加打印语句,明确实际能访问的属性:import pyttsx3 alexa = pyttsx3.init() voices = alexa.getProperty('voices') # 遍历所有语音,打印属性详情 for idx, voice in enumerate(voices): print(f"=== 语音 {idx+1} ===") print(f"ID: {voice.id}") print(f"名称: {voice.name}") print(f"语言: {voice.languages}") print(f"性别: {voice.gender}") # 尝试打印age属性,捕获可能的属性缺失情况 try: print(f"年龄: {voice.age}") except AttributeError: print("年龄属性不可用")修改属性访问方式
把代码中类似voice['VoiceAge']的错误写法改成属性访问:# 错误写法 # age = voice['VoiceAge'] # 正确写法,同时处理属性不存在的情况 try: age = voice.age except AttributeError: age = "未知"按其他属性筛选语音(若age属性不可用)
要是目标引擎不支持age属性,可以通过语音名称、ID等其他属性来筛选:# 示例:选择名称包含"Microsoft"的语音 for voice in voices: if "Microsoft" in voice.name: alexa.setProperty('voice', voice.id) break
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

