我有两个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:无法导入名称用户
为什么会这样?
答案 0 :(得分:1)
变量user
在if __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
,除非这是主要模块 - 当您从其他模块导入时,您期望发生什么?
或许,您应该将此作为参数传递给函数,而不是尝试导入它。