You need to enable JavaScript to run this app. Python使用speech_recognition时报listen()缺失source位置参数错误
优惠活动
大模型
产品
解决方案
定价
更多

Python使用speech_recognition时报listen()缺失source位置参数错误

报错根本原因

触发该TypeError的本质是代码语法逻辑不符合speech_recognition库的API调用规则,常见触发场景无例外,仅两类:

  • 作用域缩进错误:sr.Microphone()上下文管理器只会在其代码块内部,将麦克风音频源绑定到source变量。如果写代码时把r.listen(source)语句放在了with块的外部,调用位置的source要么是未定义的无效值,要么是其他作用域的变量,Python在参数匹配阶段会误判为source参数未传入,抛出对应报错。
  • 方法调用逻辑错误:listen()是Recognizer类的实例方法,而非静态方法。如果跳过Recognizer实例化步骤,直接用sr.Recognizer.listen(source)的类调用方式写代码,Python会把你传入的source值当成方法要求的第一个隐式参数(即类实例自身self),真正需要传入的音频源source参数就会被判定为缺失,弹出完全匹配你描述的报错信息。
修复方法
  • 完成正确的实例化步骤:不要直接调用类本身的方法,先创建Recognizer实例,所有音频操作基于该实例执行,基础代码参考:
    import speech_recognition as sr
    
    # 正确创建Recognizer实例
    r = sr.Recognizer()
    
  • 调整缩进结构,保证source变量与listen()调用处于同一作用域:把所有依赖麦克风源的代码全部缩进到with sr.Microphone() as source:的块内部,避免跨作用域取变量。正确的代码结构如下:
    with sr.Microphone() as source:
        # 块内执行噪音校准、监听操作
        r.adjust_for_ambient_noise(source)
        audio_data = r.listen(source)
    
  • 快速排查变量覆盖问题:如果以上步骤都完成仍报错,检查是否存在变量重名,比如之前代码把r这个变量重新赋值成了字符串、列表等非Recognizer类型的对象,此时调用r.listen()也会触发参数匹配类的报错。

内容的提问来源于stack exchange,提问作者Vishal Ram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 11:06:03