我正在使用一个包含此脚本的脚本:
if not os.path.exists(copy):
print "Wrong path-directory name"
我有另一个包含所有变量:
copy = /users/.../.... e.t.c.
当我通过第一个呼叫第二个时,我正在采取所有期望的结果,除了错误的路径。消息是:
if not os.path.exists(copy):
NameError: name 'copy' is not defined.
为什么我的脚本在os.path模块中时无法识别复制路径?我应该修改什么?
答案 0 :(得分:2)
variables.py:
copy="/users/.../.... e.t.c."
您有几个选择:
script.py
import variables
print copy # NameError: name 'copy' is not defined
print variables.copy # /users/.../.... e.t.c.
或:
from variables import copy
print copy # /users/.../.... e.t.c.
或:
from variables import *
print copy # /users/.../.... e.t.c.
或:
execfile("variables.py")
print copy # /users/.../.... e.t.c.
问题只是当您导入variables
时,该文件中的所有内容都属于variables
,因此您可以使用variables.copy
访问该文件。
如果您不想这样做,可以使用from variables import copy
显式导入该变量,然后将其导入为copy
。这会隐藏任何正在阅读代码的人的信息,因为他们可能误导相信copy
是一个局部变量,而实际上它是在其他地方定义的。
下一个方法与第二个方法相同,但它从variables
导入所有定义的对象。这比第二种方法更糟糕,因为他们甚至无法看到哪些变量来自import
。
第四种方法只运行variables.py
文件,因为脚本被直接放入execfile
调用位置的代码中。这比第三种方法更不透明。请不要用它来做你想做的事。
我的偏好是第一种方法,因为它可以很容易地看到所有内容的来源,而且就个人而言,from X import *
导入样式很糟糕,而最后一种方式只是可怕。强>