如何解决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
相关产品推荐
相关产品推荐

