Python语音识别库使用报错:AttributeError: 'NoneType'无close属性
解决sr.Microphone()的AttributeError: 'NoneType' object has no attribute 'close'错误
这个错误的核心原因是麦克风设备无法被speech_recognition库正确初始化,导致Microphone实例的stream属性为None,当with代码块结束执行__exit__方法时,调用stream.close()就会触发该异常。
以下是具体的解决方法:
1. 检查麦克风权限
确保运行Python程序的用户拥有麦克风访问权限:
- Windows:打开「设置」→「隐私和安全性」→「麦克风」,确认已允许桌面应用访问麦克风。
- macOS:打开「系统设置」→「隐私与安全性」→「麦克风」,勾选对应的Python程序。
2. 指定正确的麦克风设备
如果系统有多个音频输入设备,默认设备可能无法被识别,先列出所有可用设备:
import speech_recognition as sr for index, name in enumerate(sr.Microphone.list_microphone_names()): print(f"设备索引 {index}: {name}")
运行后找到可用的麦克风设备索引,修改Microphone的初始化参数:
with sr.Microphone(device_index=你的设备索引) as source: # 后续代码不变
3. 修复依赖库问题
该错误常因PyAudio(speech_recognition依赖的音频处理库)版本不兼容或未正确安装导致:
- 卸载旧版本:
pip uninstall pyaudio speechrecognition - 重新安装:
- 常规安装:
pip install pyaudio speechrecognition - Windows环境若安装失败,可使用
pipwin:pip install pipwin pipwin install pyaudio pip install speechrecognition
- 常规安装:
4. 优化代码错误捕获
原代码仅捕获了语音识别阶段的异常,未处理麦克风初始化阶段的错误,修改后可提前捕获问题:
import pyttsx3 import speech_recognition as sr def takecommand(): r = sr.Recognizer() try: with sr.Microphone() as source: print("Escuchando...") r.pause_threshold = 1 audio = r.listen(source) print("Recognizing...") query = r.recognize_google(audio, language='en-in') print(query) query = query.lower() return query except AttributeError as e: print("麦克风初始化失败,请检查设备或权限:", e) return 'None' except Exception as e: print("识别出错:", e) return 'None'
内容的提问来源于stack exchange,提问作者Adrián Martínez
相关产品推荐
相关产品推荐

