首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复命令:赋值前引用的局部变量‘UnboundLocalError’

如何修复命令:赋值前引用的局部变量‘UnboundLocalError’
EN

Stack Overflow用户
提问于 2021-02-12 23:08:23
回答 3查看 105关注 0票数 1

我正在尝试制作一个虚拟助手,剩下的唯一问题就是这个。我试过google和reddit,但是我没有得到任何答案。我不知道如何修复它,但下面是代码:

我输入这个是因为堆栈溢出不让我发布,除非我有更多的文本,所以这是我的生活故事。上周在学校,我们做了一个实验,我们必须喝5公升的水,然后用大麦和衣服忍受10分钟的严寒天气。我们必须看看,站在寒冷的环境中是否会让我们比待在室内更想小便。当时的理论是,血液叶片会收缩,没有任何空间容纳水,所以我们会把水尿出来。在下一节课之前没有人要上厕所,然后每个人每10分钟上一次厕所。

代码语言:javascript
复制
import speech_recognition as sr
import pyttsx3
import pywhatkit
import datetime
import wikipedia
import pyjokes

listener = sr.Recognizer()
engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)# 0 is male, 1 is female
engine.say('Booting Lora system')
engine.runAndWait()

def talk(text):
    engine.say(text)
    engine.runAndWait()

def take_command():
    try:
        with sr.Microphone() as source:
            voice = listener.listen(source)
            command = listener.recognize_google(voice)
            command = command.lower()
    except:
        pass
    return command


def run_lora():
    command = take_command()
    if 'play' in command:
        song = command.replace('play', '')
        talk('playing ' + song)
        pywhatkit.playonyt(song)
    elif 'time' in command:
        time = datetime.datetime.now().strftime('%H:%M')
        talk('Current time is ' + time)
    elif 'who' in command:
        question = command
        info = wikipedia.summary(question, 3)
        talk(info)
    elif 'tell' in command and 'joke' in command:
        talk(pyjokes.get_joke())
    else:
        talk('Sorry I did not understand')

while True:
    run_lora()
EN

回答 3

Stack Overflow用户

发布于 2021-02-12 23:19:19

因为您在run_lora中定义了command,所以它是一个私有变量,您只需添加global command即可。

代码语言:javascript
复制
def take_command():

    global command    # <---- Over Here #############

    try:
        with sr.Microphone() as source:
            voice = listener.listen(source)
            command = listener.recognize_google(voice)
            command = command.lower()
    except:
        pass
    return command
票数 0
EN

Stack Overflow用户

发布于 2021-02-12 23:37:53

take_command()函数中将单词command更改为cmnd。您的命令变量在实际声明之前已被引用

代码语言:javascript
复制
def take_command():
    try:
        with sr.Microphone() as source:
            voice = listener.listen(source)
            cmnd = listener.recognize_google(voice)
            cmnd = cmnd.lower()
    except:
        pass
    return cmnd
票数 0
EN

Stack Overflow用户

发布于 2021-02-12 23:52:09

我想我的问题是我需要pyadio,但是pyaudio版本对于python3.8来说太老了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66174222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档