相同Python语音助手代码本地正常 他人运行报UnboundLocalError原因咨询
Python语音助手跨机器运行报错问题排查
根本原因
你提供的代码中take_command函数存在变量未初始化的隐患:
- 变量
command仅在try代码块完全执行无异常的情况下才会被定义 - 如果
try块中任意一步触发异常,代码会直接进入except执行pass,此时command没有被定义,函数末尾执行return command时就会触发「Unbound local variable referenced before assignment」报错
两台机器运行表现不一致的原因
你本地运行正常,只是刚好测试过程中take_command的try块从未触发过异常,而你朋友的运行环境触发了异常,常见触发场景包括:
- 朋友的电脑没有可用的麦克风设备,或者没有给VSCode开放麦克风访问权限,执行
sr.Microphone()时直接报错 - 朋友的网络无法正常访问谷歌语音识别接口,执行
listener.recognize_google(voice)时触发网络异常 - 朋友的设备上相关依赖库安装存在缺失,运行时触发依赖调用异常
修复方案
修改take_command函数,提前给command赋初始空值即可,参考修改后的代码:
def take_command(): # 提前初始化变量,避免异常场景下未定义 command = "" try: with sr.Microphone() as source: print('Listening...') voice = listener.listen(source) command = listener.recognize_google(voice) command = command.lower() if 'alexa' in command: command = command.replace('alexa', '') print(command) except: pass return command
内容的提问来源于stack exchange,提问作者Paul Smith
相关产品推荐
相关产品推荐

