当我在第61页,第62页阅读David Beazley,Brian K. Jones的书“Python cookbook”时出现了这个问题。我总结道:
>>> s = '{name} has {n} messages.'
>>> name = 'Guido'
>>> n = 37
现在,如果只想替换{name},但又不想替换{n},请使用__missing__()
方法定义备用字典类
>>> class safesub(dict):
def __missing__(self, key):
return '{' + key + '}'
然后
>>> del n # Make sure n is undefined
>>> s.format_map(safesub(vars()))
你得到了理想的结果:
'Guido has {n} messages.'
我的问题:
为什么需要__missing__()
方法来使这段代码有效?
答案 0 :(得分:1)
format_map()
将查找关键字'n'
的参数。由于此密钥缺失,因此会在正常KeyError
中引发dict
。定义__missing__
方法确定此处发生的事情:返回'{n}'
,以便格式化的字符串保持不变。