You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将YAML文件中的变量直接作为Python内部声明变量使用?

如何直接调用YAML配置文件中的变量名?

我希望将变量及其值存储在名为settings.yml的外部YAML文件中,而非在Python脚本内声明:

setting1: cat
setting2: dog

能否直接像使用内部声明的变量一样调用这些变量的名称和值?例如执行print(setting1, setting2)返回cat dog。目前我仅能读取该文件内容:

import yaml

with open("settings.yml", "r") as stream:
    try:
        data = yaml.safe_load(stream)
        for key, value in data.items():
            print(f"{key}: {value}")
    except yaml.YAMLError as exc:
        print(exc)

print(setting1, setting2)

但print(setting1, setting2)无法正常运行,特此求助。


解决方案

方法1:将配置注入全局命名空间

可以把YAML加载后的字典键值对直接添加到全局命名空间中,这样就能直接通过变量名调用:

import yaml

with open("settings.yml", "r") as stream:
    try:
        data = yaml.safe_load(stream)
        # 将字典键值对注入全局命名空间
        globals().update(data)
    except yaml.YAMLError as exc:
        print(exc)

# 现在可以直接调用变量
print(setting1, setting2)  # 输出: cat dog

注意:这种方法存在风险,如果YAML文件中的键名和脚本中已有的全局变量重名,会覆盖原有变量,可能导致意外问题,仅建议在小型脚本或可控场景下使用。

方法2:用类封装配置(更安全规范)

更推荐的方式是将配置封装成类属性,避免污染全局命名空间:

import yaml

class Settings:
    pass

with open("settings.yml", "r") as stream:
    try:
        data = yaml.safe_load(stream)
        # 将配置作为类属性添加
        for key, value in data.items():
            setattr(Settings, key, value)
    except yaml.YAMLError as exc:
        print(exc)

# 通过类调用变量
print(Settings.setting1, Settings.setting2)  # 输出: cat dog

这种方式更清晰,也能避免变量名冲突,适合中大型项目使用。


内容的提问来源于stack exchange,提问作者Ooker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:09