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

Python语音助手报UnboundLocalError: command变量赋值前引用错误如何解决

错误成因

你编写的take_command函数中,command变量仅在try代码块内部被定义,只要try块内任意一步触发异常(比如麦克风访问被拒绝、网络不通无法调用谷歌语音识别接口、无法识别输入的语音内容),程序就会跳过command的赋值逻辑直接执行except块的pass,走到最后的return command时,command变量还没有被创建,就会触发UnboundLocalError。

修复方案

按以下步骤修改代码即可:

  • 第一步:在take_command函数的开头给command设置初始默认值,避免异常场景下变量未定义,同时建议不要使用裸except,明确捕获语音识别相关的常见异常方便后续排查问题,修改后的代码如下:
def take_command():
    command = ''  # 新增这行设置默认空值
    try:
        with sr.Microphone() as source:
            print('listening...')
            voice = listener.listen(source, None, 10)
            command = listener.recognize_google(voice)
            command = command.lower()
            if 'alexa' in command:
                command = command.replace('alexa', '')
                print(command)
    except sr.RequestError:
        print("网络异常,无法连接语音识别服务")
    except sr.UnknownValueError:
        print("无法识别输入的语音内容")
    except Exception as e:
        print(f"其他错误:{e}")
    return command
  • 第二步:额外修复代码中的另一处逻辑错误,原代码中退出程序的判断写法有误,elif ('bye') or ('quit') in command的逻辑是只要'bye'为真(字符串非空永远为真)就会触发退出,无论输入什么内容都会直接退出程序,修改为:
elif 'bye' in command or 'quit' in command:
    talk('再见')
    sys.exit()

内容的提问来源于stack exchange,提问作者yuvadarshan murugan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:45:04