【问题标题】:Problem grabbing parameters using execfile within a class在类中使用 execfile 获取参数时出现问题
【发布时间】:2011-09-16 09:26:33
【问题描述】:

我遇到了与this question 中的第一个问题类似的问题,据我所知,该问题没有得到解答。

我有一个文件“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

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

非常感谢。

【问题讨论】:

    标签: python class


    【解决方案1】:

    我不明白你想要做什么(但我不喜欢它,这只是我)但要解决你的问题(在 python2.6 中测试):

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

    但是来自doc

    注意

    默认的本地人按照描述的方式行事 对于下面的函数 locals(): 对默认本地人的修改 不应该尝试字典。 传递一个明确的本地字典如果 您需要查看代码对 函数 execfile() 之后的局部变量 返回。不能使用 execfile() 可靠地修改函数的 当地人。

    关于:

    欢迎任何帮助,或者更好 获取参数的方法 在类中使用的文件。

    您可以使用导入。

    【讨论】:

    • @Jdog: 使用globals(),变量将在全局范围内设置,config.py 中的变量将在您的模块中随处可用。只是为了确保这是你想要的:)
    【解决方案2】:

    尽管将配置设置保存在 Python 文件中可能很方便,但我还是建议不要这样做。我认为它会引发一整套你不想处理的问题。任何东西都可以放在您的配置文件中,包括恶意代码。

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

    如果你在这两者之间选择有困难,我会推荐 json 模块。 Json 是一种简单而灵活的结构化数据格式。

    【讨论】:

    • 谢谢,我会看看 json。暂时应该足够安全,因为只有我会使用该程序或可以访问它:)
    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2022-11-02
    • 1970-01-01
    相关资源
    最近更新 更多