我有两个文件。第一个文件,我们将其称为“ a.py”。第二个是“ b.py”。
以下是“ a.py”的示例:
#!/usr/bin/env python
# coding=utf-8
CHOOSE = input ('''
\033[1;35m choose 1 or 2:\033[0m
1)tom
2)jack
''')
a = 666
b = "bbb"
def f():
print("this is a test")
return "function"
if __name__ == '__main__':
if CHOOSE == '1':
username = 'tom'
print(username)
elif CHOOSE == '2':
username = 'jack'
print(username)
else:
print('wrong choice,scipt is exit...')
以下是“ b.py”的示例:
#!/usr/bin/env python
# coding=utf-8
import a
from a import b,f,CHOOSE,username
a = a.a
f()
print(b,a,CHOOSE,username)
我在哪里错了?如何解决?
答案 0 :(得分:2)
由于此代码段:
if __name__ == '__main__':
if CHOOSE == '1':
username = 'tom'
print(username)
elif CHOOSE == '2':
username = 'jack'
print(username)
else:
print('wrong choice,scipt is exit...')
仅当a.py
作为未从其他模块导入的主python文件运行时,才会执行,因此username
将不会定义,因此无法导入。这里是如何解决它:
a.py
:
...
def foo(CHOOSE):
if CHOOSE == '1':
username = 'tom'
elif CHOOSE == '2':
username = 'jack'
else:
username = None
return username
b.py
:
from a import foo
CHOOSE = input ('''
\033[1;35m choose 1 or 2:\033[0m
1)tom
2)jack
''')
username = foo(CHOOSE)
if username:
print(username)
else:
print('Wrong choice')
说明:首先,您需要将计算名称的代码提取为可重用的代码。函数是为了实现代码的可重用性,因此我定义了一个带有一个参数的参数,并返回相应的值。然后在b.py
中使用(导入然后调用)此函数。
通常将if __name__ == '__main__':
放在您认为是入口点的模块中,因此,如果要使用它,也许b.py
是一个更好的地方。
答案 1 :(得分:0)
只有在以if __name__ == '__main__'
为 main 模块的情况下运行脚本时,才触发块a.py
(例如,使用命令python a.py
运行该脚本)。如果将其他任何东西用作主模块,并且导入了a
,则将不满足此条件,并且其中的代码也不会运行。
已创建变量username
,并将其添加到a
块中的if __name__ == '__main__'
的命名空间中。当您执行python b.py
时,此块内的代码将不会执行,因此username
永远不会被添加到命名空间中。因此,当您尝试导入它时,在加载文件a
之后立即会收到一条错误消息,指出'username'
不存在-从未创建。