Python 非模板字符串上的str.format会自动忽略模板参数

Python 非模板字符串上的str.format会自动忽略模板参数,python,string,Python,String,我真的希望在这里提出一个异常,而不是默默地忽略模板 为什么python中允许这样做,在哪些有效的用例中这种行为更可取?忽略额外的参数会使格式更加灵活。请注意,这与“非模板”字符串无关;如果确实有占位符,则仍会忽略额外的参数: 通过忽略额外参数,您可以使用变量模板,选择一个,并传入所有可能的插值值,或传入vars(self)以根据当前实例生成灵活的格式: >>> 'potato {}'.format(123, 456) 'potato 123' >>> 'pot

我真的希望在这里提出一个异常,而不是默默地忽略模板


为什么python中允许这样做,在哪些有效的用例中这种行为更可取?

忽略额外的参数会使格式更加灵活。请注意,这与“非模板”字符串无关;如果确实有占位符,则仍会忽略额外的参数:

通过忽略额外参数,您可以使用变量模板,选择一个,并传入所有可能的插值值,或传入
vars(self)
以根据当前实例生成灵活的格式:

>>> 'potato {}'.format(123, 456)
'potato 123'
>>> 'potato {spam}'.format(spam=123, eggs=456)
'potato 123'
def\uuuu str\uuuuuu(自):

return“对于带有占位符的模板字符串,也会忽略额外的参数。是的,我注意到了这一点,并认为出于同样的原因,这很奇怪(特别是因为部分模板化
'hello{x}{y})。format(x=123)
引发异常,而不是返回
'hello 123{y}”“
缺少的参数很难从中恢复。如果
{x}
周围的空格多于一个,该怎么办?您包括或忽略了什么?如果缺少的参数包含了字段宽度,您是否仍然包括该宽度?@wim:使用
repr()
的值而不是值本身。类似地,还有一个
!s
也可以使用
str(value)
>>> 'potato {}'.format(123, 456)
'potato 123'
>>> 'potato {spam}'.format(spam=123, eggs=456)
'potato 123'
def __str__(self):
    return '<Foo object, spam={spam!r}, eggs={eggs!r}'.format(**vars(self))