繁体   English   中英

为什么我不断收到 AttributeError: 'NoneType' 对象没有属性 'lower'?

[英]Why do I keep getting a AttributeError: 'NoneType' object has no attribute 'lower'?

我正在研究类似于 Siri 和 Cortana 的弱 Ai,但是我注意到我一直收到“AttributeError: 'NoneType' 对象没有属性 'lower'”,旁边是这个,而不是我的代码接收我的查询,它总是打印'对不起,我没听懂'。有人知道如何解决这个问题吗? 谢谢

错误:

if 'wikipedia' in query.lower():
AttributeError: 'NoneType' object has no attribute 'lower'

代码:

import pyttsx3
import speech_recognition as sr
import datetime
import wikipedia
import webbrowser
import os
import smtplib
import pythoncom

print("Initializing Karren")

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("I am Karren. How may I assist you?") # deliberately on not included for now

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-uk')
        print(f"User said: {query}\n")

    except Exception as e:
        print("Sorry i didn't catch that...")
        query = None
    return query 

speak("Initializing Karren...")
wishMe()
query = takeCommand()


if 'wikipedia' in query.lower():
    speak("Searching wikipedia")
    query = query.replace("wikipedia", "")
    results = wikipedia.summary(query, sentences=2)
    speak(results)

发生这种情况是因为takeCommand正在返回None None没有lower方法,因此您会收到此错误。

您可以做的一件事是记录有关在takeCommand中引发的异常的更多信息,该异常导致它进入except块,或者只是删除try块以便异常停止程序,然后读取回溯。

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-uk')
    print(f"User said: {query}\n")

except Exception as e:
    print("Sorry i didn't catch that...")
    query = "None" # or whatever str
return query 

这个我自己试过了。 在 Takecommand() 函数中,query = none,用字符串替换 none。 原因是当您遇到错误时,Nonetype 没有降低属性,query = none 并且由于它不是 str 或其他什么,lower() 无法转换它。 如上所述,这是解决此错误而不会再遇到任何错误的一种方法。 测试响应。

否则删除查询 = 无

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM