从另一个脚本导入变量

时间:2018-08-22 15:09:05

标签: python python-3.x

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

  • 系统工作方式示例
  • 具有始终监听功能的脚本
  • 我说一个字(例如:“ hello”),它运行了另一个功能
  • 我说sthg(例如:“巴塞罗那时间”)
  • 使用最后一部分(例如:“巴塞罗那”)并将其存储到变量中(例如:loc)
  • 它运行另一个脚本(例如:time.py)

main.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),并且没有函数,那么它将起作用。

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

1 个答案:

答案 0 :(得分: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的本地变量,该变量保存模块对象。我不确定为什么要这么做。