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

1 投票
3 回答
1053 浏览
提问于 2025-04-17 21:00

我有两个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 中调用这个函数。记住:导入语句是在你调用解释器的时候执行的,而用户赋值是在运行时进行的。

撰写回答