如何将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
相关产品推荐
相关产品推荐

