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

