语音识别发出类型错误NoneType none iterable

2024-04-24 09:57:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个密码识别码,如下所示:

from wit import Wit
import pyttsx3, time

def speak(string):
    engine = pyttsx3.init()
    engine.setProperty('rate', 220)

    engine.say(string)
    engine.runAndWait()

def Hear():
    recog = sr.Recognizer()
    with sr.Microphone() as source:
        audio= recog.listen(source)
        print (audio)
        return 

    wit_key = 'FO7EYTKK6OHRSZ3A5UFPMZOC7VIXCVSY'
    try:
        print('VEXD THINKS YOU SAID '+ recog.recognize_wit(audio, key=wit_key))
        heard = recog.recognize_wit(audio, key=wit_key)
    except sr.UnknownValueError:
        print("I DIDN't get that")
    except sr.RequestError as e:
        print("SERVER DISCONECTED")

speak("CHECKING IDENTITY" )
sound = Hear()
time.sleep(1)
if "master"in sound:
    speak("Yes My Lord")

当我说主人的时候,它应该说是的,我的主人 但是当我说master时,它返回这个错误

File "c:/Users/tdmfa/OneDrive/Desktop/VEXD app/VEXD AI/AI_START.py", line 33, in <module>
    if "master"in sound:
TypeError: argument of type 'NoneType' is not iterable 

Tags: keyinimportmastertimeaudioengineprint
2条回答
sound= Hear()

这行代码不接收来自Hear()函数的任何输出。您的Hear()函数不返回任何值,它只是退出函数并返回None。这就是为什么它说
'NoneType' is not iterable,因为您正在尝试迭代sound

这应该起作用:

from wit import Wit
import pyttsx3, time
import speech_recognition as sr


def speak(string):
    engine = pyttsx3.init()
    engine.setProperty('rate', 220)

    engine.say(string)
    engine.runAndWait()

def Hear():
    recog= sr.Recognizer()
    with sr.Microphone() as source:
        audio= recog.listen(source)
        

    wit_key = 'FO7EYTKK6OHRSZ3A5UFPMZOC7VIXCVSY'
    try:
        audio_str = recog.recognize_wit(audio, key=wit_key)
        print('VEXD THINKS YOU SAID '+ audio_str)
        return audio_str
    except sr.UnknownValueError:
        error1 = "I DIDN't get that"
        print(error1)
        return error1
    except sr.RequestError as e:
        error2 = "SERVER DISCONNECTED"
        print(error2)
        return error2

speak("CHECKING IDENTITY")
sound= Hear()
time.sleep(1)
if "master" in sound:
    speak("Yes My Lord")

看起来您应该从Hear()函数返回heard,而不是像当前那样返回None。该函数中有两个退出点,都返回None

  • 识别器获取音频后立即调用return
  • 当函数在不调用return返回特定值的情况下结束时隐式执行

要修复此问题,请在识别器获取音频后立即删除return调用,然后在heard = recog.recognize_wit(audio, key=wit_key)之后添加return heard。如果引发了预期的异常之一,则函数仍然可以返回None,因此您可能希望返回空列表,或者根据需要重试

我不熟悉您正在使用的库,因此我假设heard将是某种类型的iterable(列表、元组、字符串等),对代码的其余部分有意义

相关问题 更多 >