在类中使用execfile抓取参数的问题
我遇到了一个问题,跟这个问题里的第一个问题有点像,但我看到这个问题没有人回答。
我有一个文件叫“config.py”,里面有很多参数是一个类要用的(这个config.py文件会有变化),但是我无法通过execfile把这些参数传递到这个类里。
在下面这段示例代码中:
class Class():
def __init__(self):
execfile("config.py")
print x
# config.py
x = "foo"
>>> t = Class()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
NameError: global name 'x' is not defined
欢迎任何帮助,或者有没有更好的方法从文件中获取参数,以便在类中使用。
非常感谢。
2 个回答
1
虽然把配置设置放在一个Python文件里可能很方便,但我不太建议这样做。这样做会带来一系列你不想面对的问题。因为任何东西都可以放在你的配置文件里,包括一些恶意代码。
我会选择使用 json 模块或者 ConfigParser 模块来保存我的配置。
如果你在这两个之间犹豫不决,我建议使用json模块。Json是一种简单而灵活的结构化数据格式。
1
我不太明白你想做什么(不过这只是我个人的看法,我不太喜欢这样),但要解决你的问题,可以试试下面这个(在python2.6中测试):
class Class():
def __init__(self):
execfile('config.py', locals()) # Not recommanded, maybe you want globals().
print x
不过根据文档的说明:
注意
默认的局部变量就像下面提到的函数局部变量一样:不应该尝试修改默认的局部变量字典。如果你需要在函数execfile()返回后查看代码对局部变量的影响,请传递一个明确的局部变量字典。execfile()不能可靠地用来修改函数的局部变量。
还有关于:
任何帮助都欢迎,或者有没有更好的方法从文件中获取参数,以便在一个类中使用。
你可以使用import。