无法在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)
我遇到了一个错误
导入错误:无法导入名称user
这是为什么呢?
3 个回答
0
你可以试试这个方法,让 user
变成全局变量:
user = ''
if __name__ == '__main__':
user=raw_input("Enter your name\n")
不过……你真的应该好好想想你在做什么。如果你不打算在这个模块不是主模块的时候去设置 user
,那你从其他模块导入它时,你希望发生什么呢?
可能你应该把这个当作参数传给一个函数,而不是试图去导入它。
1
因为你使用了 if __name__ == '__main__'
这个语句。如果这个文件是从其他模块导入的,__name__
就会被设置为模块的名字。这意味着,只有当你直接运行 emotion.py
文件时,里面的代码才会被执行。
想要更详细地了解 __name__
的用法,可以看看 这里。
1
变量 user
是在 if __name__ == '__main__'
这个块里面定义的。当你执行导入语句的时候,这个块里的内容是不会被执行的。
当然,你可以定义一个全局变量
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")
里面,或者:
in sympathy.py:
def get_user():
user=raw_input("Enter your name\n")
从 correlation.py
中调用这个函数。记住:导入语句是在你调用解释器的时候执行的,而用户赋值是在运行时进行的。