我希望使用.yaml来管理一个程序的几个全局参数。我更喜欢在函数中管理这个参数,如下所示。然而,当globals().update()
包含在函数中时,它似乎不起作用。另外,考虑到需要加载未知名称的变量的数量不确定,使用基本的global
方法是不合适的。有什么想法吗?
.亚姆勒
test:
- 12
- 13
- 14
- stuff:
john
test2: yo
巨蟒
import os
import yaml
def load_config():
with open(os.path.join(os.getcwd(), {file}), 'r') as reader:
vals = yaml.full_load(reader)
globals().update(vals)
期望输出
load_config()
test
---------------
[12,13,14,{'stuff':'john'}]
test2
---------------
yo
我得到的
load_config()
test
---------------
NameError: name 'test' is not defined
test2
---------------
NameError: name 'test2' is not defined
请注意:{file}
是给你的,代码实际上并不是这样写的。还要注意的是,我知道通常不推荐使用全局,但它是回答这个问题所必需的。
1条答案
按热度按时间eh57zj3b1#
你的代码中有
{file}
,我假设它只是一个实际文件名的字符串。我当然希望你不要看.format()
,然后eval()
这个代码?这将是一个非常糟糕和不安全的运行代码的方式。只需返回字典
vals
本身,并根据需要访问它:输出:
你应该 * 绝对**决不 * 仅仅用外部文件的内容更新
globals()
。globals()
只用于非常特殊的用例。获得所需的确切输出只是格式化字典内容的问题:
它给出了您描述的输出。
请注意,这在技术上是多余的:
默认情况下,文件操作在当前工作目录上执行,因此您可以使用以下命令实现相同的效果:
如果您希望打开脚本所在 * 文件夹中的文件 *,请考虑以下做法: