使用类中的execfile捕获参数的问题

时间:2011-06-16 13:32:16

标签: python class

我遇到的问题类似于this question中的第一个问题,据我所知,这个问题没有得到答复。

我有一个文件“config.py”,其中包含一个类要使用的很多参数(这个config.py文件会改变),但是我无法通过execfile将它们传播到类中。 / p>

在一段代码示例中:

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 个答案:

答案 0 :(得分:1)

我没有得到你想要的东西(但我不喜欢它,这只是我)但是要解决你的问题吗(在python2.6中测试):

class Class():
    def __init__(self):
        execfile('config.py', locals())  # Not recommanded, maybe you want globals().
        print x

但是来自doc

  

请注意

     

默认的本地行为如上所述   对于函数locals()如下:   修改默认的本地人   不应该尝试字典。   传递显式的本地词典,如果   你需要看到代码的效果   函数execfile后的locals()   回报。 execfile()不能使用   可靠地修改功能   本地人。

和关于:

  

欢迎任何帮助,或者更好   从中检索参数的方法   一个要在类中使用的文件。

您可以使用导入。

答案 1 :(得分:1)

尽管将配置设置保存在Python文件中可能会很方便,但我建议不要这样做。我认为这会打开一系列您并不想真正处理的问题。任何东西都可以放在你的配置文件中,包括恶意代码。

我会使用json模块或ConfigParser模块来保存我的配置。

如果您在这两者之间选择时遇到问题,我会推荐使用json模块。 Json是一种简单而灵活的结构化数据格式。