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
相关产品推荐
相关产品推荐

