utils/tools.py 是不是有问题
Closed this issue · 2 comments
cocoforever commented
函数recuresive_update
old_value为字符串的时候, value为list会报错。value为tuple时,old_value字符串转成list失去了本来的意义了
Karmenzind commented
谢谢反馈。
这个函数写完后没有全面测试,因为代码只用到了一两个条件。
如果要兼容各种情况,确实需要再改一下。
请问是项目运行时报错了吗?
Karmenzind commented
这个函数只是为了合并配置项,名字改成merge_configuration
更合适。
至于通用场景的递归更新字典,我刚才简单改了一下,大致是下面这样吧。不考虑集合、序列的合并,直接覆盖,就像字典的update一样。
from copy import deepcopy
def recursive_updated(old, new):
"""
for general scene
:old: to be updated
:new:
:return: a new dict
"""
result = deepcopy(old)
for key, value in new.items():
if key in result:
old_value = result[key]
if type(old_value) != type(value):
raise TypeError(
"[key: %s] old: %r new: %r" % (key, old_value, value)
)
if isinstance(value, dict):
result[key] = recursive_updated(old_value, value)
# elif isinstance(value, list):
# result[key] += value
# elif isinstance(value, set):
# result[key] |= value
else:
result[key] = value
else:
result[key] = value
return result