PyCharm运行代码不执行take_command函数 仅播报语句后退出代码0
问题原因
- 核心原因是你仅完成了
take_command函数的定义逻辑,没有在代码中主动调用该函数。Python脚本执行时会按顺序执行全局作用域下的代码:完成依赖导入、全局变量初始化、语音播报逻辑执行、take_command函数定义后,没有后续可执行代码,就会直接正常退出,所以返回码为0。 - 补充隐性问题:现有代码的异常捕获使用了空
pass逻辑,即使后续调用函数后出现麦克风权限不足、谷歌语音识别服务无法连接等问题,你也看不到任何报错提示,不利于排查问题。
解决方案
- 首先在函数定义完成后添加函数调用逻辑,如果需要语音助手持续工作,可以加循环保持运行
- 优化异常捕获逻辑,增加报错打印方便定位问题
修复后可运行的参考代码:
import speech_recognition as sr import pyttsx3 listener = sr.Recognizer() engine = pyttsx3.init() engine.say('Hello There') engine.say('How can I help you?') engine.runAndWait() def take_command(): try: with sr.Microphone() as source: print('listening...') # 新增环境噪音校准,提高识别准确率 listener.adjust_for_ambient_noise(source) voice = listener.listen(source) # 要识别中文可添加参数language='zh-CN',默认仅识别英文 command = listener.recognize_google(voice) command = command.lower() if 'alexa' in command: command = command.replace('alexa', '').strip() print(f"有效指令:{command}") return command except Exception as e: # 替换空pass,打印异常信息方便排查 print(f"识别失败:{e}") return "" # 新增函数调用逻辑,循环运行语音助手 if __name__ == "__main__": while True: cmd = take_command() # 可在这里补充不同指令对应的响应逻辑 if "exit" in cmd or "退出" in cmd: engine.say("Goodbye") engine.runAndWait() break
注意事项
- 谷歌语音识别接口需要网络能正常访问谷歌服务,无法连接的话可以替换为百度、阿里等国内厂商的语音识别接口
- 运行时需要给PyCharm开放麦克风权限,否则会提示找不到输入设备
内容的提问来源于stack exchange,提问作者RitvikTiwari
相关产品推荐
相关产品推荐

