Python语音助手跨文件调用Feature.py函数功能失效求助
Python语音助手拆分代码故障修复方案
1. 核心问题:@functools.lru_cache() 错误使用
故障原因
lru_cache仅支持传入可哈希参数的函数,类实例方法默认传入的self(类实例本身)不可哈希;且__init__、listen、takecommand这类需要实时执行的方法加缓存后,仅首次调用会正常执行,后续调用全部返回历史结果,直接导致功能无响应。
修复方案
删除HoverAssist类下所有方法的@functools.lru_cache()装饰器。
2. 核心问题:Webopener调用逻辑错误
故障原因
Feature.py中Webopener是普通函数,webopen是其内部嵌套方法,Main.py直接调用Webopener.webopen()无法访问到内部方法,会触发属性不存在报错。
修复方案
修改Feature.py的Webopener相关代码,将webopen提为顶层函数:
# Feature.py 调整后代码 USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" def webopen(query): for j in search(query=query, tld="co.in", num=1, stop=1, pause=1): webbrowser.open(j)
同步修改Main.py对应调用逻辑:
elif 'open' in query.lower(): from Feature import webopen query = query.replace("open", "") query = query.replace("chrome", "") self.speak(f"Opening {query} ") webopen(query=query)
3. 核心问题:Reminder线程未启动
故障原因
Main.py中创建Reminder线程后仅赋值给变量,未调用start()方法,线程不会实际运行。
修复方案
修改对应代码:
h = threading.Thread(target=lambda: Reminder(tt, name)) h.start() # 新增该行启动线程
4. 核心问题:关闭摄像头逻辑错误
故障原因
cv2.destroyAllWindows()是cv2模块的全局方法,不属于VideoCapture实例对象,调用self.capture.destroyAllWindows()会触发属性报错。
修复方案
修改Main.py中关闭摄像头的代码:
elif 'close camera' in query: self.capture.release() cv2.destroyAllWindows() # 替换原self.capture.destroyAllWindows()
5. 逻辑漏洞:wish方法判断错误
故障原因
原代码判断写为elif hour > 12 and hour >15,12-15点的时间段无法匹配到下午问候,会直接走傍晚逻辑。
修复方案
调整判断逻辑:
def wish(self, hour): if 0 < hour < 12: self.speak('Good Morning') elif 12 <= hour < 15: self.speak('Good Afternoon') else: self.speak('Good Evening')
6. 可选优化:统一语音识别逻辑
Feature.py中的takecommand方法未设置phrase_time_limit参数,会出现长时间等待录音的问题,可修改为和Main.py一致的逻辑:
def takecommand(): listener = sr.Recognizer() command = "" try: with sr.Microphone() as source: voice = listener.listen(source, phrase_time_limit=4) command = listener.recognize_google(voice) print(f"User Said: {command}") print(" ") except sr.WaitTimeoutError: pass except sr.UnknownValueError: pass except sr.RequestError: print("Network error.") return command.lower()
内容的提问来源于stack exchange,提问作者Saisaaketh Sambana
相关产品推荐
相关产品推荐

