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

如何解决speech_recognition抛出UnknownValueError的报错问题

错误产生原因

你贴的判断逻辑就是这个异常的直接抛出规则,speech_recognition.UnknownValueError 只会在两种场景下触发:

  • 识别接口返回的actual_result不是合法字典结构:一般是请求异常导致的,比如网络不通、识别服务端报错、响应为空/返回HTML错误页,没有按约定返回结构化的识别结果
  • 识别结果里的alternative字段为空列表:也就是识别引擎正常收到了音频,但没能解析出任何有效文本内容
排查&解决方案

按优先级从高到低排查即可:

  • 先校验音频本身有效性
    • 把待识别的音频导出成本地文件播放确认,排除全静音、全电流噪音、音量过小的问题;如果是实时拾音,检查麦克风是否被系统静音、有没有选对拾音设备
    • 确认音频参数符合识别要求:绝大多数识别接口要求单声道、16kHz采样率、16bit位深的WAV格式,音频总时长不要超过对应接口的单段上限(免费公开接口一般限制60秒以内),过长的音频提前做分段处理
  • 检查识别接口配置
    • 用在线识别接口的场景:先确认网络连通正常,没有被防火墙、代理规则拦截请求;核对语言参数是否正确,识别中文普通话要传language="zh-CN",不要错传成其他语言编码;需要传鉴权密钥的接口确认密钥在有效期内、没有填错
    • 用本地识别引擎的场景(比如Sphinx、本地Whisper):确认对应语言的模型包已经完整安装、模型路径配置没有错误
  • 增加异常捕获避免程序崩溃
    识别逻辑不要裸写,单独捕获该异常做降级处理,参考写法:
    import speech_recognition as sr
    
    recognizer = sr.Recognizer()
    # 替换成你自己的音频读取逻辑
    # with sr.Microphone() as source:
    #     audio_data = recognizer.listen(source, timeout=3)
    
    try:
        # 替换成你实际使用的识别方法,比如recognize_whisper、recognize_baidu等
        text = recognizer.recognize_google(audio_data, language="zh-CN")
        print("识别结果:", text)
    except sr.UnknownValueError:
        # 自定义识别失败的处理逻辑,比如提示用户重说、记录错误日志
        print("未识别到有效语音内容,请重试")
    except sr.RequestError as e:
        print(f"识别服务连接异常:{str(e)}")
    
  • 高阶调试:如果以上步骤都没解决问题,可以临时在抛出异常的位置打印actual_result的完整内容,看接口实际返回了什么,就能快速定位是服务端报错还是音频本身的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:24:21