我如何修复 UnboundLocalError:分配前引用的局部变量“命令”

时间:2021-02-12 15:08:23

标签: python pycharm

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

我输入这个是因为堆栈溢出不会让我发帖,除非我有更多的文字,所以这是我的生活故事。上周在学校我们做了一个实验,我们必须喝 5 升水,然后在寒冷的天气里用大麦任何衣服站立 10 分钟。我们必须看看站在寒冷中是否会让我们更想小便而不是在里面。理论是血叶会收缩,没有任何空间可以放水,所以我们会把它尿出来。下节课之前没人要小便,然后每个人每 10 分钟去一次洗手间。

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()

3 个答案:

答案 0 :(得分:0)

因为你在 command 中定义了 run_lora 它是一个私有变量 您只需要添加 global command


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

答案 1 :(得分:0)

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


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

答案 2 :(得分:0)

我认为我的问题是我需要 pyadio,但 pyaudio 版本对于 python 3.8 来说太旧了