Python语音识别开发遇NameError提示statement未定义的异常捕获失效问题
报错核心原因
- 变量赋值逻辑漏洞:
statement仅在语音识别流程执行成功时才会被赋值。一旦触发sr.UnknownValueError(即用户未发出可识别的有效语音),代码会直接跳转至对应except分支执行错误提示打印,全程不会运行到statement的赋值语句。 - 异常捕获作用域失效:代码中新增的
except NameError分支,仅能捕获try块运行过程中抛出的同类错误。本次报错实际发生在try块结束后的独立条件判断语句中,完全不在异常捕获的覆盖范围内,拦截逻辑自然失效。
修正实现
- 在
try块执行前为statement设置空字符串默认值,从根源上规避变量未定义问题 - 识别失败时直接跳过唤醒词判断流程,无有效识别结果时默认将唤醒标记设为False,避免无效变量访问
修正后代码:
r = sr.Recognizer() with sr.Microphone() as source: print("Say Anything: ") audio = r.listen(source) # 提前初始化变量,杜绝未定义报错 statement = "" try: statement = r.recognize_google(audio).lower() print("You said : {}".format(statement)) except sr.UnknownValueError: print(random.choice(command_errors)) # 无有效识别结果时直接跳过后续判断 if not statement: Wake = False else: if ai_name in statement: engine.say("At your service") response_to_wake = ("At your service, " + user_pronoun.lower()) engine.runAndWait() print(response_to_wake) Wake = True else: Wake = False
内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

