Python语音指令启动程序时replace方法无法移除字符串空格问题
问题背景
开发自定义类Alexa语音助手,用于实现自定义指令与对应执行逻辑、获得更高开发自由度时,遇到代码问题:传入的程序名字符串中的空格无法被移除,导致逻辑执行失败。
问题代码
listener = sr.Recognizer() engine = pyttsx3.init() voices = engine.getProperty('voices') engine.setProperty('voice', voices[1].id) programs = { 'brave': 'brave.exe', 'Chrome': 'chrome.exe', } def run_program(program): try: spaces = int(program.count(' ')) print(spaces) program.replace(' ', '', spaces) print(program) os.startfile(f"{programs[program]}") except Exception as er: print(er) talk("that program isn't in the list") def talk(text): engine.say(text) engine.runAndWait()
运行现象
- 代码统计传入
program参数的空格数量后,调用replace方法尝试移除空格 - 打印
program变量发现空格未被清除,无法匹配programs字典中的程序名键 - 触发「程序不在列表中」的异常提示
故障原因
Python中字符串是不可变对象,str.replace()方法不会在原字符串上做修改,执行后会返回替换完成的新字符串。原代码仅调用了replace方法,没有接收方法返回值,因此原program变量存储的字符串没有任何变化。
另外代码中提前统计空格数再传给replace第三个参数属于冗余操作,不传该参数时replace默认会替换字符串中所有匹配的子串。
修复方案
将run_program函数中调用replace的行修改为赋值语句,接收替换后的新字符串:
# 原错误写法:program.replace(' ', '', spaces) # 修正后写法 program = program.replace(' ', '')
修正后完整的run_program函数逻辑:
def run_program(program): try: program = program.replace(' ', '') print(program) os.startfile(f"{programs[program]}") except Exception as er: print(er) talk("that program isn't in the list")
内容的提问来源于stack exchange,提问作者Lucifer_uwu
相关产品推荐
相关产品推荐

