不知道为什么这段代码有效(使用带有__missing__方法的替代字典类)

时间:2016-10-29 18:15:20

标签: python python-3.2

当我在第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__()方法来使这段代码有效?

1 个答案:

答案 0 :(得分:1)

format_map()将查找关键字'n'的参数。由于此密钥缺失,因此会在正常KeyError中引发dict。定义__missing__方法确定此处发生的事情:返回'{n}',以便格式化的字符串保持不变。