You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyttsx3开发语音助手时遭遇KeyError: 'VoiceAge'问题求助

解决KeyError: 'VoiceAge'问题

错误原因

你大概率是在后续代码里把pyttsx3返回的Voice对象当成字典,用voice['VoiceAge']这种方式访问属性,但实际上pyttsx3的Voice实例是通过属性访问(而非字典键)获取信息的,且属性名是小写的age,不是VoiceAge。另外,不同TTS引擎(比如Windows的SAPI5、macOS的NSSpeechSynthesizer)支持的属性存在差异,部分引擎可能压根没有age属性。

解决方案

  1. 先确认当前环境下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("年龄属性不可用")
    
  2. 修改属性访问方式
    把代码中类似voice['VoiceAge']的错误写法改成属性访问:

    # 错误写法
    # age = voice['VoiceAge']
    
    # 正确写法,同时处理属性不存在的情况
    try:
        age = voice.age
    except AttributeError:
        age = "未知"
    
  3. 按其他属性筛选语音(若age属性不可用)
    要是目标引擎不支持age属性,可以通过语音名称、ID等其他属性来筛选:

    # 示例:选择名称包含"Microsoft"的语音
    for voice in voices:
        if "Microsoft" in voice.name:
            alexa.setProperty('voice', voice.id)
            break
    

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:35:26