小编典典

格式化字符串未使用的命名参数

python

假设我有:

action = '{bond}, {james} {bond}'.format(bond='bond', james='james')

这将输出:

'bond, james bond'

接下来,我们有:

 action = '{bond}, {james} {bond}'.format(bond='bond')

这将输出:

KeyError: 'james'

是否有一些解决方法来防止发生此错误,例如:

  • 如果keyrror:忽略,则不理会它(但要解析其他人)
  • 比较格式字符串和可用的命名参数,如果缺少则添加

阅读 214

收藏
2020-12-20

共1个答案

小编典典

如果您使用的是Python

3.2+,则可以使用str.format_map()

对于bond, bond

>>> from collections import defaultdict
>>> '{bond}, {james} {bond}'.format_map(defaultdict(str, bond='bond'))
'bond,  bond'

对于bond, {james} bond

>>> class SafeDict(dict):
...     def __missing__(self, key):
...         return '{' + key + '}'
...
>>> '{bond}, {james} {bond}'.format_map(SafeDict(bond='bond'))
'bond, {james} bond'

在Python 2.6 / 2.7中

对于bond, bond

>>> from collections import defaultdict
>>> import string
>>> string.Formatter().vformat('{bond}, {james} {bond}', (), defaultdict(str, bond='bond'))
'bond,  bond'

对于bond, {james} bond

>>> from collections import defaultdict
>>> import string
>>>
>>> class SafeDict(dict):
...     def __missing__(self, key):
...         return '{' + key + '}'
...
>>> string.Formatter().vformat('{bond}, {james} {bond}', (), SafeDict(bond='bond'))
'bond, {james} bond'
2020-12-20