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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:05:16