有办法在模块内设置全局变量吗?当我试图以如下所示的最明显的方式来做它时,Python解释器说变量__DBNAME__不存在。
...
__DBNAME__ = None
def initDB(name):
if not __DBNAME__:
__DBNAME__ = name
else:
raise RuntimeError("Database name has already been set.")
...在导入另一个文件中的模块之后
...
import mymodule
mymodule.initDB('mydb.sqlite')
...追踪结果是:
...UnboundLocalError:在赋值前引用的局部变量'DBNAME‘.
有什么想法吗?按照this fellow's的建议,我试图使用一个模块来设置一个单例。
发布于 2009-12-30 03:11:04
你正在陷入一种微妙的怪癖。您不能在python函数中重新分配模块级变量。我认为这是为了阻止人们偶然地在一个函数中重新分配东西。
您可以访问模块名称空间,只是不应该尝试重新分配。如果您的函数指定了什么,它就会自动成为一个函数变量-- python将不会查看模块名称空间。
你可以:
__DB_NAME__ = None
def func():
if __DB_NAME__:
connect(__DB_NAME__)
else:
connect(Default_value)但是不能在函数中重新分配__DB_NAME__。
一个解决办法是:
__DB_NAME__ = [None]
def func():
if __DB_NAME__[0]:
connect(__DB_NAME__[0])
else:
__DB_NAME__[0] = Default_value注意,我没有重新分配__DB_NAME__,我只是修改它的内容。
https://stackoverflow.com/questions/1977362
复制相似问题