从另一个脚本导入变量

我正在创建个人助理。我想从另一个文件导入一个变量。尽管有很多与我的问题相关的问题,但我找不到有效的答案。

  • 系统工作方式示例

  • 具有始终监听功能的脚本

  • 我说了一个字(例如:“ hello”),它运行了另一个功能

  • 我说 sthg(例如:'在巴塞罗那的时间')

  • 它采用最后一部分(例如:“ Barcelona”)并将其存储到变量中(例如:loc)

  • 它运行另一个脚本(例如:time.py)

主文件

def googlecheck():

    attempts = 0

    # Importar fitxers - config.py = variables globals

    import config

    # Salutació de l'assistent a partir de la funció

    hi = ['Gerard']

    tts('Hola ' + random.choice(hi))

    while True:

        print(1)

        r = sr.Recognizer()

        with sr.Microphone() as msg:

            r.adjust_for_ambient_noise(msg)

            audio = r.listen(msg, phrase_time_limit=5)

        try:

            # Inicia la variable global mainvr

            config.init()

            config.mainvr = r.recognize_google(audio, language='es-ES')

            print(config.mainvr)

        except:

            # Si no es detecta cap paraula, suma 1, si s'arriba a 3, (3 vegades error), torna a la función principal.

            attempts += 1

            if attempts >= 3:

                activ()

                break

            continue


        hora = ['hora', 'en']

        exit = ['salir', 'adiós', 'hasta pronto', 'vete', 'cállate']

        if all(a in config.mainvr for a in hora):

            loc = config.mainvr[8:]

            print(loc)

            import hora

        if any(b in config.mainvr for b in exit):

            break

        else:

            # Si no es detecta cap paraula, suma 1, si s'arriba a 3, (3 vegades error), torna a la función principal.

            attempts += 1

            if attempts >= 3:

                activ()

                break

PD:当我说“你好”时,还有一部分代码会调用这个函数。


time.py


def f():

    from main.googlecheck() import loc

    print(loc)


f()

此时,我想在 time.py 文件中获取 loc 变量。如果我有两个文件,并且已经定义了一个变量(例如:loc = Valls),并且没有函数,那么它将起作用。


我正在使用导入方法来执行此操作,我认为这可能是我做错了,因为尽管未严格定义变量,但该方法仍应正常工作。任何帮助都非常感谢。谢谢,


喵喵时光机
浏览 184回答 1
1回答

斯蒂芬大帝

这一行:from main.googlecheck() import loc……没有多大意义。您正在调用main.googlecheck()- 如果您之前已经完成,这将起作用import main- 然后尝试将结果作为模块导入 - 这不会。该函数的结果不是模块。实际上,因为您什么都没有return,所以结果是None。因此,您正在尝试import从None.您唯一可以做的import就是模块中的模块或全局变量(常量,变量,函数,类,其他模块,无论什么,只要它们是全局名称)。(另外语法是无效的,但这并不重要。如果你试图做一些有意义的事情并且只是在错误的地方得到了一个括号,修复语法将是关键,但如果你试图做一些事情这首先没有意义,你如何尝试编写它并不重要。)我认为您在这里要做的是googlecheck to在最后更改return loc`,然后将这行代码更改为:loc = main.googlecheck()当然,这并不能解决您所有的问题,只能解决这个问题。仅举一个例子:loc除非if all(a in config.mainvr for a in hora)至少发生一次,否则不会设置该值。因此,例如,如果any(b in config.mainvr for b in exit)在实现之前没有实现,那么UnboundLocalError当您break退出循环时会得到一个,然后尝试return loc不进行创建。另外,您的代码正在做一些奇怪的事情,可能会或可能不会出错。例如,您import hora处于循环中间。我不确定你希望它做什么。它实际上会在hora第一次运行顶级代码,然后每次都不运行。而且,无论哪种方式,它将创建一个名为本地变量hora,用于保存模块对象。我不确定你为什么想要做其中的任何部分。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python