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

PyCharm运行代码不执行take_command函数 仅播报语句后退出代码0

问题原因
  • 核心原因是你仅完成了take_command函数的定义逻辑,没有在代码中主动调用该函数。Python脚本执行时会按顺序执行全局作用域下的代码:完成依赖导入、全局变量初始化、语音播报逻辑执行、take_command函数定义后,没有后续可执行代码,就会直接正常退出,所以返回码为0。
  • 补充隐性问题:现有代码的异常捕获使用了空pass逻辑,即使后续调用函数后出现麦克风权限不足、谷歌语音识别服务无法连接等问题,你也看不到任何报错提示,不利于排查问题。
解决方案
  1. 首先在函数定义完成后添加函数调用逻辑,如果需要语音助手持续工作,可以加循环保持运行
  2. 优化异常捕获逻辑,增加报错打印方便定位问题

修复后可运行的参考代码:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:18:03