每次我运行旨在构建弱人工智能平台的代码时,都会收到一个AttributeError: ‘NoneType’ object has no attribute ‘lower’错误,我完全不知道为什么,因为我在跟随的一个教程中它运行得很好。有人能指导我如何修复这个问题吗?我对Python还是相当新手。谢谢
import pyttsx3import speech_recognition as srimport datetimeimport wikipediaimport webbrowserimport osimport smtplibimport pythoncomprint("Initializing Bot")MASTER = "Bob"engine = pyttsx3.init('sapi5')voices = engine.getProperty('voices')engine.setProperty('voice', voices[1].id)def speak(text): engine.say(text) engine.runAndWait()def wishMe(): hour = int(datetime.datetime.now().hour) if hour>=0 and hour <12: speak("Good Morning" + MASTER) elif hour>=12 and hour<18: speak("Good Afternoon" + MASTER) else: speak("Good Evening" + MASTER) speak("How may I assist you?")def takeCommand(): r = sr.Recognizer() with sr.Microphone() as source: print("Listening...") audio = r.listen(source) try : print("Recognizing...") query = r.recognize_google(audio, language ='en-in') print(f"user said: {query}\n") except Exception as e: print("Sorry i didn't catch that...")speak("Initializing bot...")wishMe() query = takeCommand()#Logicif 'wikipedia' in query.lower(): speak('Searching wikipedia...') query = query.replace("wikipedia", "") results = wikipedia.summary(query, sentences =2) print(results) speak(results)if 'open youtube' in query.lower(): webbrowser.open("youtube.com")
另外,麦克风也无法拾取输入,您对这也是什么原因有任何想法吗?
回答:
这个错误是因为变量query
有时是None
。而你对其应用了.lower()
函数,这个函数只能在str
类型的对象上使用。
你可以通过将你的代码放在一个if
循环中来控制这个问题,只有当query
变量中有字符串时才运行。比如这样:
wishMe()query = takeCommand()#Logicif query: if 'wikipedia' in query.lower(): speak('Searching wikipedia...') query = query.replace("wikipedia", "") results = wikipedia.summary(query, sentences =2) print(results) speak(results) if 'open youtube' in query.lower(): webbrowser.open("youtube.com")