使用SpeechRecognition时麦克风断开处理及线程错误捕获方法
线程异常捕获解决方法
因为listen_in_background会启动独立线程执行识别逻辑,主线程的try...except无法捕获子线程抛出的异常,必须把异常处理逻辑放到识别回调函数内部,或者通过全局线程异常钩子处理:
- 回调内捕获异常(推荐):把所有识别相关逻辑包裹在回调的
try...except里,直接处理子线程内的错误
import speech_recognition as sr def callback(recognizer, audio): try: # 执行语音识别操作 text = recognizer.recognize_google(audio) print(f"识别结果: {text}") except sr.UnknownValueError: print("无法解析音频内容") except sr.RequestError as e: print(f"调用识别服务失败: {str(e)}") except Exception as e: # 捕获其他所有未预料的异常 print(f"识别线程发生错误: {str(e)}") # 初始化并启动后台监听 r = sr.Recognizer() mic = sr.Microphone() stop_listening = r.listen_in_background(mic, callback)
- 全局线程异常钩子(Python 3.8+支持):如果需要统一处理所有线程的异常,可以设置
threading.excepthook:
import threading import traceback def thread_error_handler(args): print(f"线程 [{args.thread.name}] 抛出未捕获异常:") traceback.print_exception(args.exc_type, args.exc_value, args.exc_traceback) threading.excepthook = thread_error_handler
麦克风断开的处理方案
针对麦克风断开的场景,可以从异常捕获、设备状态检测、监听恢复三个维度处理:
- 捕获设备断开异常:麦克风断开时,SpeechRecognition通常会抛出
OSError或IOError,可以在回调或初始化逻辑中捕获:
def callback(recognizer, audio): try: text = recognizer.recognize_google(audio) except OSError as e: if "Invalid input device" in str(e): print("麦克风已断开连接") # 停止当前监听 stop_listening() # 触发重连逻辑 reconnect_microphone()
- 定期检测设备状态:通过PyAudio枚举系统音频设备,检查当前使用的麦克风是否存在:
import pyaudio def is_mic_available(target_device_id): p = pyaudio.PyAudio() device_exists = False for idx in range(p.get_device_count()): dev_info = p.get_device_info_by_index(idx) if dev_info["index"] == target_device_id: device_exists = True break p.terminate() return device_exists # 主线程中定时检测(比如用time.sleep循环) import time while True: if not is_mic_available(mic.device_index): print("麦克风已断开,尝试重连...") stop_listening() # 重新初始化麦克风 try: mic = sr.Microphone(device_index=target_device_id) stop_listening = r.listen_in_background(mic, callback) print("麦克风重连成功") except OSError: print("重连失败,等待5秒后重试") time.sleep(5)
- 监听恢复逻辑:当检测到麦克风重新连接后,调用
listen_in_background重启监听即可,注意要先调用之前返回的stop_listening()函数终止旧线程。
内容的提问来源于stack exchange,提问作者David.Arthur8
相关产品推荐
相关产品推荐

