【发布时间】:2017-06-21 08:19:12
【问题描述】:
我有一个 YAML 配置文件,其中包含一个字典,如下所示:
"COLUMN_NAME": column_function
它将字符串映射到函数(存在并且应该被调用)。
但是,当我使用 yaml 加载它时,我看到加载的字典现在将字符串映射到字符串:
'COLUMN_NAME': 'column_function'
现在我无法按预期使用它 - 'column_function' 不指向 column_function。
什么是加载我的dict 以便映射到我的函数的好方法?在对这个问题进行了一些搜索和阅读之后,我对使用eval 或类似的东西非常谨慎,因为配置文件是用户编辑的。
我认为this thread 与我的问题有关,但我不确定解决该问题的最佳方法。
-
我认为
getattr和setattr已经出局,因为它们对实例化对象进行操作,而我有一个简单的脚本。 -
globals()、vars()和locals()为我提供了dicts 的变量,我想我应该使用globals(),根据this。
我应该为我的配置dict 中的每个键值对查找其中的字符串吗?这是一个好方法吗:
for (key, val) in STRING_DICTIONARY.items():
try:
STRING_DICTIONARY[key] = globals()[val]
except KeyError:
print("The config file specifies a function \"" + val
+ "\" for column \"" + key
+ "\". No such function is defined, however. ")
【问题讨论】:
标签: python string python-3.x dictionary yaml