运行桌面助手Voicy时Python程序出现Traceback及WaitTimeoutError求助
解决speech_recognition库的WaitTimeoutError问题
问题原因
你遇到的WaitTimeoutError是因为r.listen(source, timeout=3)设置了3秒的超时时间,这段时间内程序未检测到任何语音输入,直接抛出异常导致程序崩溃。
解决方案
1. 捕获超时异常,避免程序崩溃
在调用r.listen()时加入异常处理,让程序超时后给出提示并继续运行,而非直接崩溃。修改takeCommand()函数:
import speech_recognition as sr def takeCommand(): r = sr.Recognizer() with sr.Microphone() as source: print("Listening...") try: # 可根据需求调整timeout时长,比如改为5秒 audio = r.listen(source, timeout=5) except sr.WaitTimeoutError: print("未检测到语音输入,请重新说话") return "" # 后续语音识别逻辑示例 try: query = r.recognize_google(audio, language='zh-CN') print(f"你说的是: {query}") return query except sr.UnknownValueError: print("无法识别语音,请重新尝试") return ""
2. 调整超时参数
timeout:设置等待语音输入的最长时间(秒),如果需要更长等待时间,可把值调大(比如timeout=10)。- 可选添加
phrase_time_limit参数:限制单次语音输入的最长时长,例如r.listen(source, timeout=5, phrase_time_limit=10),避免程序一直等待过长语音。
3. 检查麦克风设备
- 确保麦克风正常工作,且当前Python程序有麦克风访问权限。
- 可通过
sr.Microphone.list_microphone_names()查看可用设备,指定正确的麦克风:
# 查看所有麦克风设备 print(sr.Microphone.list_microphone_names()) # 指定设备(比如索引为0的设备) with sr.Microphone(device_index=0) as source: # 后续逻辑
内容的提问来源于stack exchange,提问作者Juhi Khare
相关产品推荐
相关产品推荐

