无法在python中从一个脚本导入变量到另一个脚本

时间:2014-03-05 22:14:03

标签: python

我有两个python脚本

emotion.py

if __name__ == '__main__':

    user=raw_input("Enter your name\n")     

    print("Calling open smile functions.....")

    subprocess.Popen("correlationSvg.py", shell=True)

correlationSvg.py

from emotion import user
import os
import csv

with open('csv/test/'+user+'.csv') as f:
  reader = csv.DictReader(f, delimiter=';')
  rows = list(reader)

我收到错误

  

ImportError:无法导入名称用户

为什么会这样?

3 个答案:

答案 0 :(得分:1)

变量userif __name__ == '__main__'块内定义。执行import语句时不会执行此操作。

您当然可以定义(脚本)全局变量

user = ""
if __name__ == '__main__':

    user=raw_input("Enter your name\n")     

    print("Calling open smile functions.....")

    subprocess.Popen("correlationSvg.py", shell=True)

如果您想在执行时获取用户,我会将该行

user=raw_input("Enter your name\n")

进入correlation.py或:

in  sympathy.py:

def get_user():
    user=raw_input("Enter your name\n") 

并从correlation.py访问此功能。请记住:import语句在您调用解释器时发生,而用户分配在运行时更快乐。

答案 1 :(得分:1)

因为您使用的是if __name__ == '__main__'。如果正在从另一个模块导入文件,则__name__将设置为模块的名称。这意味着,只有在您运行emotion.py时才会处理该缩进中的代码。

有关__name__的详细说明,您可能需要查看here

答案 2 :(得分:0)

您可以尝试这样做,强制user为全局:

user = ''
if __name__ == '__main__':
    user=raw_input("Enter your name\n")     

然而......你应该考虑一下你在这做什么。如果您不希望设置user,除非这是主要模块 - 当您从其他模块导入时,您期望发生什么?

或许,您应该将此作为参数传递给函数,而不是尝试导入它。